这是我的测试套件。
我在一个临时文件夹中有一个自动生成的 Python 包。都是.py
文件。我想以编程方式将它们编译成 (a).pyc
和 (b).pyo
文件。(一个测试会做.pyc
,另一个会做.pyo
。)当然,这应该用活跃的解释器来完成。我不想导入模块,只需编译。
我怎样才能做到这一点?
这是我的测试套件。
我在一个临时文件夹中有一个自动生成的 Python 包。都是.py
文件。我想以编程方式将它们编译成 (a).pyc
和 (b).pyo
文件。(一个测试会做.pyc
,另一个会做.pyo
。)当然,这应该用活跃的解释器来完成。我不想导入模块,只需编译。
我怎样才能做到这一点?
在您的 Python lib 目录中,将有一个名为compileall.py
(例如/usr/lib/python2.6/compileall.py
)的脚本。
在您的代码中,产生(例如,通过使用)指向包含您生成的代码的目录os.spawnl
的调用。compileall.py
如果您使用python -O
它调用它,它将生成.pyo
文件;如果您使用python
它调用它,它将生成.pyc
文件。
我想,诀窍是使用正确版本的 Python 解释器进行调用。
compileall.py
py_compile
在引擎盖下使用。
你可能想看看这个py_compile
模块。可悲的是,它不会让您在 and 之间pyo
进行选择pyc
。
请注意,只要在导入 python 模块 (*.py) 的目录中有写入权限,同名的 *.pyc 文件就会被 crate。此外,*.pyc 和 *.pyo不会为程序增加任何性能,除了减少模块加载时间。
使用 py_compile 可以在 .pyo 和 pyc 之间进行选择
导入 py_compile
编译为简单的字节码:
py_compile.compile('sourcefilename.py', 'destinationfilename.pyc', doraise=True )
编译为优化的字节码:“-o”和“-oo”都可以作为参数传递
py_compile.compile('sourcefilename.py', 'destinationfilename.pyo','-oo', doraise=True )
我已经尝试过使用 python 2.7,它似乎只在你传递所有参数时才有效。