Python:以编程方式将 Python 包编译为 pyc 或 pyo 文件

发布于 2024-11-03 14:48:26 字数 212 浏览 0 评论 0原文

这是我的测试套件。

我在临时文件夹中有一个自动生成的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

陈独秀 2024-11-10 14:48:26

在您的 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 of compileall.py pointed at the directory containing your generated code. If you invoke it using python -O it will generate .pyo files; if you invoke it using python it will generate .pyc file.

The trick, I suppose, would be to call with the right version of the Python interpreter.

compileall.py uses py_compile under the hood.

浮云落日 2024-11-10 14:48:26

您可能想查看 py_compile 模块。遗憾的是,它不允许您在 pyopyc 之间进行选择。

You may want to have a look at the py_compile module. Sadly it won't let you choose between pyo and pyc.

爱你不解释 2024-11-10 14:48:26

注意,只要导入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.

黎夕旧梦 2024-11-10 14:48:26

可以使用 py_compile 在 .pyo 和 pyc 之间进行选择

导入py_compile

编译为简单字节码:

py_compile.compile('源文件名.py', '目标文件名.pyc',
doraise=真)

编译为优化字节码:“-o”和“-oo”都可以作为参数传递

py_compile.compile('sourcefilename.py', 'destinationfilename.pyo','-oo', doraise=True )

I尝试过使用 python 2.7,它似乎只有在传递所有参数时才起作用。

chosing between .pyo and pyc is possible with py_compile

import py_compile

compile as simple bytecode:

py_compile.compile('sourcefilename.py', 'destinationfilename.pyc',
doraise=True )

compile as optimised bytecode: both '-o' and '-oo' can be passed as parameters

py_compile.compile('sourcefilename.py', 'destinationfilename.pyo','-oo', doraise=True )

I have tried with python 2.7 and it only seems to work when you pass on all the parameters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文