如何编译Python文件?

我已经开始学习Python,而且我也是Ubuntu的新用户。我需要知道如何编译`.py`文件的方法。我已尝试使用以下命令:
python "hello.py"

其他编译Python的方法有哪些?

2python -m py_compile script.py - Mayur
5个回答

补充Bryan的回答,如果你只是想从终端编译一个文件或一堆文件,可以以以下方式执行py_compile模块作为脚本: python -m py_compile fileA.py fileB.py fileC.py ...

11如果你正在编译代码是因为想要提高速度,你也可以添加-O标志,例如python -O -m py_compile …,这将“开启基本优化”。它主要会去除assert语句和if __debug__代码,所以对大多数代码没有影响。详细信息请参考man python“What does Python optimization … do?” - Rory O'Kane
这不是编译,而是将Python语言转写为其他表示形式。你仍然需要Python解释器来运行它。以防有人认为“哦,那个答案真的很简单!”然后发现它实际上根本没有生成编译后的二进制文件。 - Luc

还要注意的是,您不需要编译 .py 文件就可以运行它。Python 是一种解释型语言,您可以直接运行脚本,方法如下:

python hello.py

或者通过在脚本顶部添加#!/usr/bin/env python,使脚本可执行,然后使用chmod +x hello.py将文件设置为可执行,并运行以下命令:
./hello.py

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

我对为什么这样能够运行感到困惑。难道Python解释器不需要能够读取脚本才能运行吗?如果只给予执行权限(chmod +x),解释器是如何读取脚本的呢? - fabda01
1@yellow01:当你执行一个包含"shebang"的脚本时,也就是第一行以#!/path/to/interpreter开头的脚本,内核实际上会执行在那里声明的内容,并将脚本路径作为一个参数传递。以我的例子为例,当你运行./hello.py时,实际执行的是/usr/bin/env python ./hello.py。详见https://en.wikipedia.org/wiki/Shebang_(Unix) - MestreLion
3@yellow01 你说得对,根据MestreLion所描述的过程,一旦启动解释器,它将需要读取权限。然而,chmod +x授予执行权限,并且不会影响现有的权限,因此可以假设它在现在具有可执行权限的同时也是可读的。 - spectras

您还可以尝试compileall
python -m compileall ./

https://docs.python.org/3/library/compileall.html - myrdd

看看这个链接 在Python中编译

在页面的中间部分,它谈到了可以导入的py_compile模块。 语法如下:

import py_compile

py_compile.compile("file.py")

这种编译方法不会像运行python file.py那样执行模块。
还有一种方法可以编译整个目录树,但我会让你查看链接以了解如何执行。
希望对你有所帮助。

你可以使用各种方法将Python脚本编译成二进制代码,但我发现使用Nuitka更高效。
Nuitka是一个支持几乎所有Python版本的Python到C++编译器。
命令语法非常简单。
nuitka hello.py

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

7更高效的是如何?为什么有人会想要使用它? - muru
Nuitka确实非常有用 - 例如,它允许您将Python程序发送到未安装Python的计算机上。但是由于Nuitka将Python程序编译为C++机器代码,您可以绕过这一点。 - user258532