Python:以编程方式将 Python 包编译为 pyc 或 pyo 文件
这是我的测试套件。
我在临时文件夹中有一个自动生成的 Python 包。都是 .py
文件。我想以编程方式将它们编译为 (a) .pyc 和 (b) .pyo 文件。 (一个测试将执行 .pyc
,另一个测试将执行 .pyo
。)当然,这应该使用活动解释器来完成。我不想导入模块,只是编译。
我该怎么做?
This is for my test suite.
I have an automatically-generated Python package in a temporary folder. It's all .py
files. I want to programmatically compile these into (a) .pyc
and (b) .pyo
files. (One test will do .pyc
, another will do .pyo
.) This should be done with the active interpreter, of course. I do not want to import the modules, just compile.
How can I do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
在您的 Python lib 目录中,将有一个名为
compileall.py
的脚本(例如,/usr/lib/python2.6/compileall.py
)。在您的代码中,生成(例如,通过使用 os.spawnl )对compileall.py 的调用,该调用指向包含生成的代码的目录。如果您使用 python -O 调用它,它将生成 .pyo 文件;如果您使用 python 调用它,它将生成 .pyc 文件。
我想,诀窍是使用正确版本的 Python 解释器进行调用。
compileall.py
在底层使用py_compile
。In your Python lib directory, there will be a script called
compileall.py
(e.g.,/usr/lib/python2.6/compileall.py
).In your code, spawn (e.g., by using
os.spawnl
) an invocation ofcompileall.py
pointed at the directory containing your generated code. If you invoke it usingpython -O
it will generate.pyo
files; if you invoke it usingpython
it will generate.pyc
file.The trick, I suppose, would be to call with the right version of the Python interpreter.
compileall.py
usespy_compile
under the hood.您可能想查看
py_compile
模块。遗憾的是,它不允许您在pyo
和pyc
之间进行选择。You may want to have a look at the
py_compile
module. Sadly it won't let you choose betweenpyo
andpyc
.注意,只要导入Python模块(*.py)的目录有写权限,就会生成同名的*.pyc文件。
此外,*.pyc 和 *.pyo 不会增加程序的任何性能,除了减少模块加载时间。
Note, that as long as there is a write permission in a directory from which a python module (*.py) is imported, the *.pyc file with the same name will be crated.
Moreover, *.pyc and *.pyo do not add any performance to the program, except decreaed modules loading time.
可以使用 py_compile 在 .pyo 和 pyc 之间进行选择
I尝试过使用 python 2.7,它似乎只有在传递所有参数时才起作用。
chosing between .pyo and pyc is possible with py_compile
I have tried with python 2.7 and it only seems to work when you pass on all the parameters.