7

这是我的测试套件。

我在一个临时文件夹中有一个自动生成的 Python 包。都是.py文件。我想以编程方式将它们编译成 (a).pyc和 (b).pyo文件。(一个测试会做.pyc,另一个会做.pyo。)当然,这应该用活跃的解释器来完成。我不想导入模块,只需编译。

我怎样才能做到这一点?

4

4 回答 4

10

在您的 Python lib 目录中,将有一个名为compileall.py(例如/usr/lib/python2.6/compileall.py)的脚本。

在您的代码中,产生(例如,通过使用)指向包含您生成的代码的目录os.spawnl的调用。compileall.py如果您使用python -O它调用它,它将生成.pyo文件;如果您使用python它调用它,它将生成.pyc文件。

我想,诀窍是使用正确版本的 Python 解释器进行调用。

compileall.pypy_compile在引擎盖下使用。

于 2011-04-26T19:10:54.027 回答
2

你可能想看看这个py_compile模块。可悲的是,它不会让您在 and 之间pyo进行选择pyc

于 2011-04-26T19:01:47.740 回答
1

请注意,只要在导入 python 模块 (*.py) 的目录中有写入权限,同名的 *.pyc 文件就会被 crate。此外,*.pyc 和 *.pyo不会为程序增加任何性能,除了减少模块加载时间。

于 2011-04-26T19:38:24.980 回答
0

使用 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,它似乎只在你传递所有参数时才有效。

于 2017-09-20T20:13:15.297 回答