把一个目录下所有python源文件编译pyc

一般来说,我们的工程都是在一个目录下的,一般不会说仅仅编译一个py文件而已,而是需要把整个文件夹下的py文件都编译为pyc文件,python又为了我们提供了另一个模块:compileall 。使用方法如下:

import compileall

compileall.compile_dir(r'/root/src')

也可以直接用命令行编译一个目录下的文件

python -m compileall ./utils/

编译完成后如果想要直接运行Pyc文件注意两点:

要把pyc文件从pycache目录中移动出来,放到py文件对应的位置

修改pyc文件名,生成的pyc文件的文件名一般为***.cpython-36.pyc。pyc文件可以和py文件一样用import导入,但是在此之前需要将pyc文件重命名。举个例子:

例如对model.py生成的pyc文件为model.cpython-36.pyc

如果现在想导入model.cpython-36.pyc,直接用

import model

会报错ImportError: No module named 'model'

需要将model.cpython-36.pyc重命名为model.pyc

注意:

compileall.compile_path(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-1)

字节编译沿 sys.path 找到的所有 .py 文件。如果所有文件都已成功编译,则返回true值,否则返回false值。

如果 skip_curdir 为true(默认值),则当前目录不包括在搜索中。所有其他参数传递到 compile_dir() 函数。注意,与其他编译函数不同,maxlevels 默认为 0。

在 3.2 版更改: 添加了 legacy 和 optimize 参数。

在 3.5 版更改: quiet 参数更改为多级值。

在 3.5 版更改: legacy 参数只写出 .pyc 文件,而不是 .pyo 文件,无论 optimize 的值是什么。