2016-11-16 84 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/。 –