编译python .py文件而不执行

时间:2010-01-11 14:34:45

标签: python

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

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

6 个答案:

答案 0 :(得分:68)

  

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

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

答案 1 :(得分:15)

是的,有模块compileall:

http://docs.python.org/library/compileall.html#module-compileall

这是一个编译目录中所有.py文件(但不是子目录)的示例

python -m compileall -l myDirectory

答案 2 :(得分:4)

事实上,如果您使用的是Linux,则可能已在PATH中拥有/usr/bin/py_compilefiles命令。它包装了其他人提到的py_compile模块。如果你不在Linux上,那么就是script code

答案 3 :(得分:3)

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

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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

除了选择pyc的输出位置(由@Jensen Taylor的answer), 如果你不想在pyc中写入py文件的绝对路径,你也可以指定你喜欢的追溯源文件名:

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 ./。”的文件。