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