compileall- 字节编译Python库 – Python语言服务(Python教程)(参考资料)
compileall
– 字节编译Python库
源代码: Lib / compileall.py
此模块提供了一些实用程序功能来支持安装Python库。这些函数在目录树中编译Python源文件。该模块可用于在库安装时创建缓存的字节码文件,这使得即使没有对库目录具有写权限的用户也可以使用它们。
命令行使用
这个模块可以作为一个脚本(使用 python -m compileall )编写Python源代码
-l
- 不要递归到子目录,只编译直接包含在命名或隐含目录中的源代码文件.
-f
- 即使时间戳是up -to -date,也要强制重建.
-q
- 不要打印编译的文件列表。如果传递一次,则仍会打印错误消息。如果通过两次(
-qq
),则所有输出都被抑制.
-x
regex
- regex用于搜索考虑编译的每个文件的完整路径,如果正则表达式产生匹配,则跳过该文件.
-i
list
- 读取文件
list
并将它包含的每一行添加到列表offiles和目录中进行编译。如果list
是-
,从读取行stdin
.
-b
- 将字节码文件写入其旧位置和名称,这可能会覆盖由另一个版本的Python创建的字节码文件。默认是将文件写入他们的 PEP 3147 位置和名称,允许来自多个Python版本的字节代码文件共存.
-r
- 控制子目录的最大递归级别。如果给出,那么
-l
选项将不会被考虑在内.python -m compileall< directory>-r 0 相当于 python -m compileall< directory>-l .
-j
N
- 使用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
文件,而不是.pyo
files无论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
文件,而不是.pyo
files无论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
文件,而不是.pyo
files无论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)
评论被关闭。