2016-11-16 112 views
1

我是新來的python,我從來沒有編譯過Python代碼的可執行文件。我很熟悉的語言是C,C++和Java,我從來沒有遇到過讓你從本身修改代碼的語言,就像使用Python的方法有exec執行exec函數的python代碼是否被編譯爲可執行文件?

對於下面的代碼,

a = 500 
code = raw_input() 
exec (code) 

當我請輸入作爲,print (a)程序顯示在a值。 所以這意味着變量a屬於代碼的範圍內。

我不明白會發生什麼,如果我們嘗試使用程序如py2exe將python代碼轉換爲可執行文件。 方法exec仍然有效嗎?如果它確實起作用,那麼py2exe在編譯程序時是否會帶來整個Python編譯器和解釋器?

+1

py2exe ** always **將完整的Python解釋器嵌入生成的二進制文件,100%的時間。這就是它的工作原理。 –

+0

你可能想閱讀[this](http://stackoverflow.com/questions/3265357/compiled-vs-interpreted-languages)來學習編譯和解釋......(不用擔心Java for現在,這很複雜)。 – Lunaweaver

+1

Nuitka http://nuitka.net/pages/overview.html可能更接近於以您的意思創建Python中的可執行文件。它生成C++,然後編譯並鏈接。處理'eval'的源代碼在這裏:http://pydoc.net/Python/Nuitka/0.5.14.2/nuitka.nodes.ExecEvalNodes/ – cdarke

回答

6

py2exe從來沒有將Python代碼編譯爲本機可執行文件;它總是將Python解釋器捆綁到可執行文件中。這同樣適用於freeze,cx_Freeze以及其他所有提供類似功能的工具,同時支持完整的Python語言,而不是其中的有限子集。

因此,exec,eval和類似的構造是可用的而不需要額外的設施。

+0

這是否意味着可以從可執行文件輕鬆獲取python腳本? – Sreram

+0

是的。如果你使用這些工具作爲混淆器......那麼他們從來沒有聲稱對於這個目的是好的,而不是。 (或者,您可以輕鬆獲得Python字節碼,並且Python字節碼可以很乾淨地進行拆卸)。 –

+1

參見http://stackoverflow.com/questions/261638/how-do-i-protect-python-code和https://pypi.python.org/pypi/mangler/。 –