能否编译用Python语言编写的程序?

82

我刚接触Python编程语言。我想知道是否有可能将Python程序编译成二进制代码。

是否可以将Python脚本转换为一些较低级别的编程语言,然后再将其编译为二进制代码?

一个考虑使用Python编码的开发人员可能希望保持未来能够进行二进制分发的可能性。


3
你实际上无法“编译” Python 脚本。你需要使用 Python 解释器来运行它。 - ghostdog74
33
可以。但是Python确实可以编译。 - Andrew Hare
2
@andrew,是的我知道Python可以被编译。这个人对Python很新,所以我理解他所指的“编译”是类似于C语言一样的编译方式,而不是像py2exe或pyc文件等更高级的编译方式... - ghostdog74
1
我几年前尝试过Python,所以我的知识可能是错误或过时的。Python程序不应该被转换为exe文件。Python中的程序通常随着语言本身一起发布,因此人们首先安装Python来运行它。4年前,我找到了一种将其转换为exe文件的方法。这是非平凡的,我希望有人足够明智地将将程序转换为exe文件的更简单的方法添加到语言中。 - WVrock
这可能会对您有所帮助 https://dev59.com/rW035IYBdhLWcg3wH8Ul#61899114 - Prashant
7个回答

63

我认为编译Python代码是一个很好的起点:

Python源代码会被CPython解释器自动编译成Python字节码。编译后的代码通常存储在PYC(或PYO)文件中,并且在更新源代码或其他必要情况下,会重新生成。

要向已经安装了Python的人分发程序,可以发送PY文件或PYC文件。在最近的版本中,您还可以创建包含PY或PYC文件的ZIP归档文件,并使用小型“引导脚本”将该ZIP归档文件添加到路径中。

要将Python程序“编译”成可执行文件,请使用捆绑工具,例如Gordon McMillan的安装程序(备用下载)(跨平台),Thomas Heller的py2exe(Windows),Anthony Tuininga的cx_Freeze(跨平台)或Bob Ippolito的py2app(Mac)。这些工具将您的模块和数据文件放入某种存档文件中,并创建一个可执行文件,该文件会自动设置事物,以便从该存档中导入模块。一些工具可以将存档嵌入可执行文件中。


2
effbot.org暂停更新 effbot.org正在休息中。我们会以某种形式回来的。链接无法打开,我不知道原因。 - CrazyVideoGamer
1
@CrazyVideoGamez,页面可在Wayback上找到,我已经提交了一份编辑。 - Jivan Pal

36

如果你真的想要,你可以随时使用Cython进行编译。这将生成C代码,然后您可以使用任何C编译器(如GCC)进行编译。


5
Cython很棒,但不幸的是,Cython化的代码与普通的Python相距甚远。有一个Python→11l→C++转译器,需要更少的工作量。 - tav

31

Python 作为一种动态语言,不能像 C 或 COBOL 那样静态地被“编译”成机器代码。您总是需要一个解释器来执行代码,这在语言的定义中是一个动态操作。

您可以将源代码“翻译”成字节码,这只是解释器执行的一种中间过程,用于加快代码的加载速度。它将包含注释、空格、像 "if"、"def"、"in" 等单词的文本文件转换为二进制代码,但其背后的操作在 Python 中是完全相同的,而不是在机器代码或任何其他语言中。这就是存储在 .pyc 文件中的内容,它也可以在不同架构之间进行移植。

您可能需要的不是“编译”代码(这是不可能的),而是将解释器(在正确的架构中)与代码“嵌入”在一起,以允许无需外部安装解释器即可运行代码。为此,您可以使用 py2exe 或 cx_Freeze 等所有这些工具。

也许我有点拘谨 :-P


17

您不必编译它。第一次使用(导入)时,它将由CPython解释器编译。但是如果您真的想要编译,则有几个选项。

编译为exe

或者仅编译特定的*.py文件,您可以直接使用

import py_compile
py_compile.compile("yourpythoncode.py")

1
py2exe非常适合这个任务。我已经使用它很多次了,非常满意。它甚至可以处理所有的导入语句和多个模块/代码文件。 - inspectorG4dget

6
为避免重复,我不会在此重复我的回答。
请参考我另一篇答案这里。(请注意,该答案仅涵盖编译为Python字节码。)

1
那个答案只涵盖了编译为字节码。 - lucid_dreamer
1
你是对的 @lucid_dreamer。有些人可能只是为了了解相同的内容而访问此页面。本页面中的其他解决方案已经涉及了如何将Python脚本编译成机器代码的问题。 - Abhishek Kashyap
1
我已经给你的答案点了赞,我认为它很有用,但我建议进行编辑,以便清楚地表明它只适用于字节码。 - lucid_dreamer
1
感谢 @lucid_dreamer - Abhishek Kashyap

4

Python是一种解释性语言,所以您不需要编译脚本即可运行它们。最简单的启动方法是在终端中导航到其文件夹中并执行“python somefile.py”。这取决于您已经从Python网站安装了Python。

您可以编译Python应用程序,但这通常不是新开发人员最初需要做的事情。如果您想要这样做,请查看py2exe。这将把您的Python脚本打包为可执行文件,就像Windows计算机上的任何程序一样。您还可以使用Python编译单个文件,如“将Python模块编译为字节码”部分所述,在此网站上。


-3

Python在运行时即时编译。

在Linux上运行.py文件的命令为:python abc.py


2
并不完全正确 - 当你运行Python代码时,它是解释执行的。运行Python脚本仍然需要在你的系统上安装Python(和所有所需的库)。一个编译的程序(例如:C++,Fortran)将源代码转换为二进制代码,你可以将其分发给其他人。他们不需要gcc或者你的代码依赖的任何库;它将会是自包含在可执行文件中的。 - Daniel R. Livingston

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接