我正在研究将大量的 python 模块和包编译到 pyo 中。我知道这可以通过设置 PYTHONOPTIMIZE 环境变量或在启动时指定 -O 来实现。我想强制执行 pyo 而不是 pyc 以产生尽可能小的足迹。为了在我的部署模块中执行此操作,我必须创建一个包装脚本,该脚本使用 -O 选项启动实际脚本,因为需要在启动解释器之前指定环境变量。
有什么办法可以解决这个问题并以编程方式强制创建 pyo 吗?
亲切的问候,托尔斯滕
我正在研究将大量的 python 模块和包编译到 pyo 中。我知道这可以通过设置 PYTHONOPTIMIZE 环境变量或在启动时指定 -O 来实现。我想强制执行 pyo 而不是 pyc 以产生尽可能小的足迹。为了在我的部署模块中执行此操作,我必须创建一个包装脚本,该脚本使用 -O 选项启动实际脚本,因为需要在启动解释器之前指定环境变量。
有什么办法可以解决这个问题并以编程方式强制创建 pyo 吗?
亲切的问候,托尔斯滕
要预先编译所有模块,请运行以下命令:
python -O -m compileall /path/to/your/files
pythoncompileall
模块负责编译,开关-O
使其输出 .pyo 文件。
但是,您不能强制 Python 使用这些,除非-O
为每次运行提供开关或设置PYTHONOPTIMIZE
环境变量。
请注意,所有 -O 标志所做的都是禁用assert
语句并将__debug__
标志设置为False
(Python 将优化测试)。指定 -OO 并删除文档字符串。除非您使用过多的文档字符串大小或非常慢的调试代码,否则这些不会带来太大的速度差异或节省空间。
遗憾的是,从 3.5 版开始,编译优化只生成 .pyc 文件,而不生成 .pyo
在 3.5 版更改: legacy 参数只写出 .pyc 文件,而不是 .pyo 文件,无论 optimize 的值是什么。