【问题标题】:Compiling .py files to .pyo without resorting to a wrapper script将 .py 文件编译为 .pyo 而不使用包装脚本
【发布时间】:2012-07-13 10:51:02
【问题描述】:

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

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

亲切的问候, 托尔斯滕

【问题讨论】:

    标签: python


    【解决方案1】:

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

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

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

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

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

    见:What does Python optimization (-O or PYTHONOPTIMIZE) do?

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-19
        • 2021-10-12
        • 2011-07-14
        • 1970-01-01
        相关资源
        最近更新 更多