compileall- 字节编译Python库 – Python语言服务(Python教程)(参考资料)
compileall– 字节编译Python库
源代码: Lib / compileall.py
此模块提供了一些实用程序功能来支持安装Python库。这些函数在目录树中编译Python源文件。该模块可用于在库安装时创建缓存的字节码文件,这使得即使没有对库目录具有写权限的用户也可以使用它们。
命令行使用
这个模块可以作为一个脚本(使用 python -m compileall )编写Python源代码
-l- 不要递归到子目录,只编译直接包含在命名或隐含目录中的源代码文件.
-f- 即使时间戳是up -to -date,也要强制重建.
-q- 不要打印编译的文件列表。如果传递一次,则仍会打印错误消息。如果通过两次(
-qq),则所有输出都被抑制.
-xregex- regex用于搜索考虑编译的每个文件的完整路径,如果正则表达式产生匹配,则跳过该文件.
-ilist- 读取文件
list并将它包含的每一行添加到列表offiles和目录中进行编译。如果list是-,从读取行stdin.
-b- 将字节码文件写入其旧位置和名称,这可能会覆盖由另一个版本的Python创建的字节码文件。默认是将文件写入他们的 PEP 3147 位置和名称,允许来自多个Python版本的字节代码文件共存.
-r- 控制子目录的最大递归级别。如果给出,那么
-l选项将不会被考虑在内.python -m compileall< directory>-r 0 相当于 python -m compileall< directory>-l .
-jN- 使用N工作者编译给定目录中的文件。如果使用
0,则使用os.cpu_count()的结果.
--invalidation-mode[timestamp|checked-hash|unchecked-hash]- 控制生成的字节码文件在运行时如何失效.
timestamp值,表示.pyc将生成嵌入了源时间戳和大小的文件。checked-hash和unchecked-hash值会导致生成基于哈希的pyc。Hash-basedpycs嵌入了源文件内容的哈希值而不是时间戳。请参阅缓存的字节码失效有关Python如何在运行时验证字节码缓存文件的更多信息。默认为timestamp如果没有设置SOURCE_DATE_EPOCH环境变量,和checked-hash如果设置了SOURCE_DATE_EPOCH环境变量
在版本3.7中更改:添加了--invalidation-mode参数。
没有命令行选项来控制compile()函数使用的优化级别,因为Python解释器本身提供了选项: python -O -m compileall.
公共函数
compileall.compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1, invalidation_mode=py_compile.PycInvalidationMode.TIMESTAMP)- 递归下降dir命名的目录树,编译所有
.py一路上的文件。如果所有文件编译成功则返回true值,否则返回false值// maxlevels参数用于限制递归的深度;itdefaults to
10.如果ddir给出了它,它被添加到编译时用于编译时间回溯的每个文件的路径,并且也被编译到字节代码文件中,它将用于回溯和其他源文件不存在的消息中。字节码文件被执行的时间.
如果force是真的,即使时间戳有问题也会重新编译模块.
如果rx给出,它的搜索方法是在考虑编译的每个文件的完整路径上调用的,如果它返回一个真值,则跳过该文件.
如果quiet是
False或0(默认值),文件名和其他信息打印到标准输出。设置为1,仅打印错误。设置为2,所有输出都被抑制.如果legacy为真,则将字节码文件写入其旧位置和名称,这可能会覆盖创建的字节码文件另一个版本的Python。默认是将文件写入他们的 PEP 3147 位置和名称,允许来自多个版本的Python的字节码文件tocoexist.
optimize指定编译器的优化级别。它通过内置的
compile()功能参数workers指定并行使用多少个工作程序编译文件。默认是不使用多个worker。如果平台不能使用多个worker和workers给出了参数,然后顺序编译将用作后备。如果workers比浅
0, 一个ValueError会被提出来invalidation_mode应该是
py_compile.PycInvalidationMode枚举并控制generatepycs在运行时如何失效.更改版本3.2:添加了legacy和optimize参数.
在版本3.5中更改:添加了workers参数
更改版本3.5:quiet参数更改为多级值.
更改版本3.5: legacy参数只写出
.pyc文件,而不是.pyofiles无论optimize的价值是什么在版本3.6中更改:接受路径类对象.
在版本3.7中更改:添加了invalidation_mode参数.
compileall.compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, invalidation_mode=py_compile.PycInvalidationMode.TIMESTAMP)- 用路径fullname编制文件。如果文件编译成功,则返回true值,否则返回false值
如果给出ddir,则它被添加到正在编译的文件的路径中以用于编译时间回溯,并且也编译到thebyte-code文件中,它将用于追溯和其他在执行字节码文件时源文件不存在的消息.
如果rx给出,它的搜索方法被传递给正在编译的文件的完整路径名,如果它返回一个真值,则文件不被编译并且
True被返回.如果quiet是
False或0(默认值),文件名和其他信息打印到标准输出。设置为1,仅打印错误。设为2,所有输出都被抑制.如果legacy确实如此,字节码文件被写入其遗留位置和名称,这可能会覆盖由另一个版本的Python创建的字节码文件。默认是将文件写入其PEP 3147 位置和名称,允许来自多个版本的Python的字节码文件tocoexist.
optimize指定编译器的优化级别。它被传递到内置的
compile()functioninvalidation_mode应该是
py_compile.PycInvalidationMode枚举的成员,并控制生成的pyc在运行时如何失效.新版本3.2.
更改版本3.5:quiet参数更改为多级值.
更改版本3.5: legacy参数只写出
.pyc文件,而不是.pyofiles无论optimize的价值是什么更改版本3.7:invalidation_mode参数被添加了
compileall.compile_path(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-1, invalidation_mode=py_compile.PycInvalidationMode.TIMESTAMP)- 字节编译所有
.py沿发现的文件sys.path。如果所有文件编译成功则返回atrue值,否则返回false值/skip_curdir如果为true(默认值),则当前目录不包含在搜索中。所有其他参数都传递给
compile_dir()函数。请注意,与其他编译函数不同,maxlevels默认为0.在版本3.2中更改:添加了legacy和optimize参数。
在版本3.5中更改:quiet参数已更改为多级值.
在版本3.5中更改:legacy参数只写出
.pyc文件,而不是.pyofiles无论optimizeis.更改版本3.7:invalidation_mode参数被添加了
强制重新编译所有.py中的文件Lib/子目录及其所有子目录:
import compileall
compileall.compile_dir('Lib/', force=True)
# Perform same compilation, excluding files in .svn directories.
import re
compileall.compile_dir('Lib/', rx=re.compile(r'[/\\][.]svn'), force=True)
# pathlib.Path objects can also be used.
import pathlib
compileall.compile_dir(pathlib.Path('Lib/'), force=True)
评论被关闭。