有没有办法从命令行编译Python .py文件而不用执行它?
我正在使用一个应用程序,它将python扩展存储在具有有限权限的非标准路径中,我想在安装期间编译文件。我不需要Distutils的开销。
答案 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 ./。”的文件。