将.py文件编译为.pyo而不使用包装器脚本

时间:2012-07-13 14:56:24

标签: python

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

有没有解决方法并以编程方式强制执行pyo创建?

亲切的问候, 的Thorsten

2 个答案:

答案 0 :(得分:22)

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

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

python compileall module处理编译,-O switch使其输出.pyo文件。

但是,除非为每次运行 PYTHONOPTIMIZE environment var设置了-O开关,否则不能强制Python使用这些。

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

请参阅:What does Python optimization (-O or PYTHONOPTIMIZE) do?

答案 1 :(得分:2)

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

  

在版本3.5中进行了更改:legacy参数仅写出.pyc   文件,而不是.pyo文件,无论optimize的价值是什么。

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