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

时间:2011-04-26 19:00:44

标签: python compilation pyc

这是我的测试套件。

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

我该怎么做?

4 个答案:

答案 0 :(得分:10)

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

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

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

compileall.py使用了py_compile

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分: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,但只有在传递所有参数时它才会起作用。