我正在研究为pyo编译相当多的python模块和包。我知道这可以通过设置PYTHONOPTIMIZE环境变量或在启动时指定-O来实现。我想强制执行pyo而不是pyc来产生最小的足迹。为了在我的部署模块中执行此操作,我必须创建一个使用-O选项启动实际脚本的包装器脚本,因为需要在启动解释器之前指定环境变量。
有没有解决方法并以编程方式强制执行pyo创建?
亲切的问候, 的Thorsten
答案 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的价值是什么。