12

我正在研究将大量的 python 模块和包编译到 pyo 中。我知道这可以通过设置 PYTHONOPTIMIZE 环境变量或在启动时指定 -O 来实现。我想强制执行 pyo 而不是 pyc 以产生尽可能小的足迹。为了在我的部署模块中执行此操作,我必须创建一个包装脚本,该脚本使用 -O 选项启动实际脚本,因为需要在启动解释器之前指定环境变量。

有什么办法可以解决这个问题并以编程方式强制创建 pyo 吗?

亲切的问候,托尔斯滕

4

2 回答 2

24

要预先编译所有模块,请运行以下命令:

python -O -m compileall /path/to/your/files

pythoncompileall模块负责编译,开关-O使其输出 .pyo 文件。

但是,您不能强制 Python 使用这些,除非-O为每次运行提供开关设置PYTHONOPTIMIZE环境变量

请注意,所有 -O 标志所做的都是禁用assert语句并将__debug__标志设置为False(Python 将优化测试)。指定 -OO 并删除文档字符串。除非您使用过多的文档字符串大小或非常慢的调试代码,否则这些不会带来太大的速度差异或节省空间。

请参阅:Python 优化(-O 或 PYTHONOPTIMIZE)有什么作用?

于 2012-07-13T14:59:14.417 回答
5

遗憾的是,从 3.5 版开始,编译优化只生成 .pyc 文件,而不生成 .pyo

在 3.5 版更改: legacy 参数只写出 .pyc 文件,而不是 .pyo 文件,无论 optimize 的值是什么。

来自https://docs.python.org/3.6/library/compileall.html

于 2019-04-11T07:35:41.753 回答