如何编译一个python文件?


57

我已经开始学习python,而且我还是Ubuntu的新用户。我需要知道编译.py文件的方式。我已经尝试过使用命令

python "hello.py"

编译python的其他方法是什么?

Answers:


58

除了Bryan的答案之外,如果您只是想从终端编译一个文件或一堆文件,则py_compile可以按以下方式将模块作为脚本执行:

python -m py_compile fileA.py fileB.py fileC.py ...


9
如果由于需要速度而进行编译,则还可以添加-O标记,例如python -O -m py_compile …,它将“启用基本优化”。它主要去除assert语句和if __debug__代码,因此对于大多数代码而言,它无效。有关详细信息man python,请参见和“ Python优化……能做什么?”
罗里·奥肯

26

另请注意,您无需编译.py文件即可运行它。Python是一种解释性语言,您可以使用以下命令直接运行脚本:

python hello.py

或通过将脚本添加#!/usr/bin/env python到脚本顶部,使该文件可执行,chmod +x hello.py然后运行,使脚本可执行:

./hello.py

Python 出于性能原因在内部将.py脚本编译为字节码.pyc文件是一个实现细节,除非您有充分的理由这样做,否则让python自己决定何时以及是否进行编译。


我对为什么这起作用感到困惑。Python解释器不是必须能够读取脚本才能运行它吗?如果仅授予执行权限(chmod +x),解释器将如何读取脚本?
Yellow01

@ yellow01:执行包含“ shebang”的脚本时,即第一行以开头#!/path/to/interpreter,内核实际上执行在那里声明的内容,并将脚本路径作为参数传递。在我的示例中,当您运行时./hello.py,实际执行的是/usr/bin/env python ./hello.py。参见en.wikipedia.org/wiki/Shebang_(Unix)–
MestreLion,

@ yellow01是正确的,解释器一旦通过MestreLion描述的过程开始,将需要读取权限。但是,chmod +x授予会执行,并且不会触及现有权限,因此,除了现在可以执行之外,它大概是可读的。
频谱

11

查看此链接在Python中编译

在页面中间,它讨论了可以导入的py_compile模块。语法如下:

import py_compile

py_compile.compile("file.py")

这种编译方法不会像运行python file.py一样执行模块。

还有一种编译整个目录树的方法,但是我将让您检查链接以查看其执行方式。

希望这可以帮助。



4

您可以使用多种方法将Python脚本编译为二进制代码,但是我发现使用Nuitka效率更高。

Nuitka是从Python到C ++的编译器,几乎支持所有版本的python。

命令语法很简单

nuitka hello.py

转到http://nuitka.net/doc/user-manual.html了解更多信息。


6
效率如何?为什么有人要使用它?
muru

nuitka确实非常有用-例如,它允许您将Python程序运送到未安装Python的计算机。但是当nuitka将Python程序编译为C ++机器代码时,您可以避免这种情况。
user258532 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.