编译python pyo文件

时间:2018-11-15 12:41:35

标签: python-3.x compilation

我有一个旧的c ++ / python项目,其中包括python zip文件“ python27.zip”。该zip文件包含pyo优化文件。
我正在尝试将python从2.7更新到最新的3.7.1(还更新了* .so lib文件)
我做了以下步骤:

./configure --enable-shared --prefix=~/python-3.7.1/dist
make
sudo make install

我看到我有~/python-3.7.1/dist/lib/python3.7,它的结构与我以前的2.7 zip中的结构很接近。 接下来,我尝试将所有文​​件夹编译为pyo,例如:

python3.7 -O -m compileall .

它告诉我它需要Lib和Include(标题),所以我也将那两个文件夹复制到了该位置。
python3.7 -O -m compileall .内再次做dist/lib/python3.7会告诉我

Listing './Lib/site-packages'...
Listing './Lib/sqlite3'...
....

和一些错误,例如:

Compiling './Lib/test/badsyntax_future10.py'...
***   File "./Lib/test/badsyntax_future10.py", line 3
    from __future__ import print_function
                                        ^
SyntaxError: from __future__ imports must occur at the beginning of the file

我看不到里面有任何大便。另外,如果我尝试对1个文件执行相同操作,例如python3.7 -O token.py(无错误),并且内部也没有pyo。
不要严格地判断我,我同意理解这个编译过程可能是错误的。

1 个答案:

答案 0 :(得分:0)

我必须创建自己的工具,因为没有找到适合将所有python模块编译为一个位置/归档的任何东西。

PY_COMPILE_HELPER在github上可用。仅从ubuntu进行了测试。

使用此模块,您可以:

  • 设置用于编辑的输入和输出文件夹
  • 输出源将与输入源具有相同的结构
  • 设置二进制文件的优化级别
  • 跳过或包含测试模块
  • 将编译后的文件压缩到一个存档中
  • 从缓存中清除以前编译的文件

用法示例:

$ ./py_compile_helper.py ./Python-3.7.1/Lib ./out -z -c -o2