【问题标题】:compile python .py file without executing编译 python .py 文件而不执行
【发布时间】:2010-01-11 14:34:44
【问题描述】:

有没有办法从命令行编译 Python .py 文件而不执行它?

我正在使用一个应用程序,该应用程序将其 python 扩展存储在具有有限权限的非标准路径中,我想在安装期间编译文件。我不需要 Distutils 的开销。

【问题讨论】:

  • 只存储 .py 文件有什么问题?编译是完全可选的。
  • distutils 也几乎没有开销
  • @nosklo:这叫做更快的启动时间。
  • @nosklo:在为 debian repo 打包时(就像我在本例中所做的那样),如果我可以不必担心 distutils,我会尝试。

标签: python


【解决方案1】:

py_compile 模块提供了一个从源文件生成字节码文件的函数,以及在作为脚本调用模块源文件时使用的另一个函数。

python -m py_compile fileA.py fileB.py fileC.py

【讨论】:

    【解决方案2】:

    是的,有模块compileall。这是一个编译目录(但不是子目录)中所有.py 文件的示例:

    python -m compileall -l myDirectory
    

    【讨论】:

      【解决方案3】:

      事实上,如果您使用的是 Linux,您的 PATH 中可能已经有一个 /usr/bin/py_compilefiles 命令。它包装了其他人提到的 py_compile 模块。如果您不在 Linux 上,这里是 script code

      【讨论】:

      • +1 获取有趣的信息,但我宁愿不依赖此脚本存在(或不存在)。
      • 链接已损坏。如果可以修复,请修复。
      【解决方案4】:

      $ python -c "import py_compile; py_compile.compile('yourfile.py')"

      $ python -c "import py_compile; py_compile.compileall('dir')"

      【讨论】:

      • hmmm...@Roger Pate 提出的解决方案看起来很干净,但是谢谢。
      【解决方案5】:

      除了选择pyc的输出位置(by@Jensen Taylor的answer), 如果你不希望py文件的绝对路径写在pyc中,你也可以指定一个你喜欢的源文件名进行回溯:

      python -c "import py_compile; py_compile.compile('src.py', 'dest.pyc', 'whatever_you_like')"
      

      虽然“compileall -d destdir”也可以解决问题,但有时它会限制您的工作目录。 例如,如果您希望 pyc 中的源文件名为“./src.py”,则必须移动工作目录 到 src.py 的文件夹,这在某些情况下是不可取的,然后运行类似“python -m compileall -d ./”之类的东西。

      【讨论】:

        【解决方案6】:

        我会这样说,所以你可以将它编译到你选择的位置:

        import py_compile
        py_compile(filename+".py",wantedlocation+wantedname+".pyc")
        

        正如我现在在 github.com/lolexorg/Lolex-Tools 上的 Python 项目中所做的那样

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-12
          • 2012-07-13
          • 2018-10-02
          • 1970-01-01
          • 2019-09-27
          • 2017-02-21
          相关资源
          最近更新 更多