我正在研究将大量的python模块和软件包编译为pyo。 我知道可以通过设置PYTHONOPTIMIZE环境变量或在启动时指定-O来实现。 我想强制使用pyo而不是pyc来产生最小的占用空间。 为此,在我的部署模块中,我必须创建一个包装器脚本,该脚本使用-O选项启动实际脚本,因为在启动解释器之前需要指定环境变量。
有什么办法可以解决这一问题并以编程方式强制执行pyo的创建?
亲切的问候,
索斯滕
要预先编译所有模块,请运行以下命令:
1python -O -m compileall /path/to/your/files
python compileall模块负责编译,-O开关使其输出.pyo文件。
但是,除非为每次运行提供-O开关或设置了PYTHONOPTIMIZE环境var,否则您不能强制Python使用它们。
请注意,所有-O标志都禁用了assert语句并将__debug__标志设置为False(Python将优化测试)。 指定-OO,将删除文档字符串。 除非您使用了过多的文档字符串大小或非常慢的调试代码,否则这些不会带来太大的速度差异或空间节省。
请参阅:Python优化(-O或PYTHONOPTIMIZE)有什么作用?
可悲的是,从3.5版开始,编译优化仅生成.pyc文件,而不生成.pyo
Changed in version 3.5: The legacy parameter only writes out .pyc
files, not .pyo files no matter what the value of optimize is.
来自https://docs.python.org/3.6/library/compileall.html