compileall ---字节编译python库¶
源代码: Lib/compileall.py
这个模块提供了一些实用程序功能来支持安装python库。这些函数在目录树中编译python源文件。此模块可用于在库安装时创建缓存的字节代码文件,这样即使对库目录没有写权限的用户也可以使用这些文件。
命令行使用¶
此模块可以作为脚本(使用 python -m compileall )编译python源。
- directory ...¶
- file ...¶
位置参数是要编译的文件或包含递归遍历的源文件的目录。如果没有给出参数,则表现为命令行是
-l <directories from sys.path>.
- -l¶
不要递归到子目录中,只编译直接包含在已命名或隐含目录中的源代码文件。
- -f¶
即使时间戳是最新的,也强制重新生成。
- -q¶
不要打印编译的文件列表。如果传递一次,则仍将打印错误消息。如果通过两次 (
-qq)所有输出被抑制。
- -d destdir¶
目录预先设置到要编译的每个文件的路径。这将出现在编译时的回溯中,并编译到字节代码文件中,在执行字节代码文件时,如果源文件不存在,则将在回溯和其他消息中使用。
- -s strip_prefix¶
- -p prepend_prefix¶
去除 (
-s)或附加 (-p)记录在.pyc文件夹。不能与-d.
- -x regex¶
regex用于搜索要编译的每个文件的完整路径,如果regex生成匹配项,则跳过该文件。
- -i list¶
读取文件
list并将它包含的每一行添加到要编译的文件和目录列表中。如果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值导致生成基于hash的Pyc。基于hash的Pyc嵌入源文件内容的hash,而不是时间戳。见 缓存字节码无效 有关python如何在运行时验证字节码缓存文件的详细信息。默认值为timestamp如果SOURCE_DATE_EPOCH未设置环境变量,并且checked-hash如果SOURCE_DATE_EPOCH已设置环境变量。
- -o level¶
以给定的优化级别编译。可多次用于一次编译多个级别(例如,
compileall -o 1 -o 2)
- -e dir¶
忽略指向给定目录外部的符号链接。
- --hardlink-dupes¶
如果两个
.pyc不同优化级别的文件具有相同的内容,使用硬链接合并重复的文件。
在 3.2 版更改: 增加了 -i , -b 和 -h 选项。
在 3.5 版更改: 增加了 -j , -r 和 -qq 选项。 -q 选项已更改为多级值。 -b 将始终生成以 .pyc 永不 .pyo .
在 3.7 版更改: 增加了 --invalidation-mode 选择权。
在 3.9 版更改: 增加了 -s , -p , -e 和 --hardlink-dupes 选项。将默认递归限制从10提高到 sys.getrecursionlimit() . 添加了指定 -o 多次选择。
没有命令行选项来控制 compile() 函数,因为python解释器本身已经提供了选项: python -O -m compileall .
同样, compile() 函数尊重 sys.pycache_prefix 设置。生成的字节码缓存只有在 compile() 是用同样的 sys.pycache_prefix (如果有)将在运行时使用。
公共职能¶
- compileall.compile_dir(dir, maxlevels=sys.getrecursionlimit(), ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=- 1, workers=1, invalidation_mode=None, *, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False)¶
以递归方式下降目录树 dir 编译所有
.py一路上的文件。如果所有文件编译成功,则返回一个真值,否则返回一个假值。这个 最大电平 参数用于限制递归的深度;它默认为
sys.getrecursionlimit().如果 ddir 给定,则它将被预先设置为要编译的每个文件的路径,以用于编译时的回溯,并被编译为字节代码文件,在执行字节代码文件时,如果源文件不存在,则它将用于回溯和其他消息。
如果 force 是真的,即使时间戳是最新的,模块也会重新编译。
如果 rx 如果给定,则在考虑编译的每个文件的完整路径上调用其搜索方法,如果返回真值,则跳过该文件。
如果 安静的 是
False或0(默认值)、文件名和其他信息按标准输出打印。设置为1,只打印错误。设置为2,所有输出被抑制。如果 legacy 如果为真,字节代码文件将被写入它们的旧位置和名称,这可能会覆盖由另一个版本的Python创建的字节代码文件。默认情况是将文件写入 PEP 3147 位置和名称,允许多个版本的python中的字节代码文件共存。
优化 指定编译器的优化级别。它被传递到内置
compile()功能。还接受一系列优化级别,这些级别导致一个.py在一个电话里归档。参数 工人 指定用于并行编译文件的工作线程数。默认情况下不使用多个工人。如果平台不能使用多个工人, 工人 给出了参数,然后序列编译将用作回退。如果 工人 为0,则使用系统中的核心数。如果 工人 低于
0,AValueError将被提升。invalidation_mode 应该是
py_compile.PycInvalidationMode枚举并控制如何在运行时使生成的Pyc无效。这个 stripdir公司 , 前置器 和 limit_sl_dest 参数对应于
-s,-p和-e上述选项。它们可以指定为str,bytes或os.PathLike.如果 hardlink_dupes 是真的
.pyc不同优化级别的文件具有相同的内容,使用硬链接合并重复的文件。在 3.2 版更改: 增加了 legacy 和 optimize 参数。
在 3.5 版更改: 增加了 workers 参数。
在 3.5 版更改: 安静的 参数已更改为多级值。
在 3.5 版更改: 这个 legacy 仅写出参数
.pyc文件,而不是.pyo文件无论价值多少 optimize 是。在 3.6 版更改: 接受一 path-like object .
在 3.7 版更改: 这个 invalidation_mode 已添加参数。
在 3.7.2 版更改: 这个 invalidation_mode 参数的默认值更新为“无”。
在 3.8 版更改: 设置 工人 到0现在选择最佳的核心数。
在 3.9 版更改: 补充 stripdir公司 , 前置器 , limit_sl_dest 和 hardlink_dupes 论据。默认值 最大电平 已从更改
10到sys.getrecursionlimit()
- compileall.compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=- 1, invalidation_mode=None, *, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False)¶
用路径编译文件 全名 . 如果文件编译成功,则返回一个真值,否则返回一个假值。
如果 ddir 如果给定,则它将被预先设置为要编译的文件的路径,以用于编译时的回溯,并被编译为字节代码文件,在执行字节代码文件时,如果源文件不存在,则它将用于回溯和其他消息。
如果 rx 如果给定,则将其搜索方法的完整路径名传递给正在编译的文件,如果返回真值,则不会编译该文件,并且
True返回。如果 安静的 是
False或0(默认值)、文件名和其他信息按标准输出打印。设置为1,只打印错误。设置为2,所有输出被抑制。如果 legacy 如果为真,字节代码文件将被写入它们的旧位置和名称,这可能会覆盖由另一个版本的Python创建的字节代码文件。默认情况是将文件写入 PEP 3147 位置和名称,允许多个版本的python中的字节代码文件共存。
优化 指定编译器的优化级别。它被传递到内置
compile()功能。还接受一系列优化级别,这些级别导致一个.py在一个电话里归档。invalidation_mode 应该是
py_compile.PycInvalidationMode枚举并控制如何在运行时使生成的Pyc无效。这个 stripdir公司 , 前置器 和 limit_sl_dest 参数对应于
-s,-p和-e上述选项。它们可以指定为str,bytes或os.PathLike.如果 hardlink_dupes 是真的
.pyc不同优化级别的文件具有相同的内容,使用硬链接合并重复的文件。3.2 新版功能.
在 3.5 版更改: 安静的 参数已更改为多级值。
在 3.5 版更改: 这个 legacy 仅写出参数
.pyc文件,而不是.pyo文件无论价值多少 optimize 是。在 3.7 版更改: 这个 invalidation_mode 已添加参数。
在 3.7.2 版更改: 这个 invalidation_mode 参数的默认值更新为“无”。
在 3.9 版更改: 补充 stripdir公司 , 前置器 , limit_sl_dest 和 hardlink_dupes 争论。
- compileall.compile_path(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=- 1, invalidation_mode=None)¶
字节编译所有
.py找到的文件sys.path. 如果所有文件编译成功,则返回一个真值,否则返回一个假值。如果 skip_curdir 为true(默认值),当前目录不包括在搜索中。所有其他参数都传递给
compile_dir()功能。注意,与其他编译函数不同,maxlevels默认为0.在 3.2 版更改: 增加了 legacy 和 optimize 参数。
在 3.5 版更改: 安静的 参数已更改为多级值。
在 3.5 版更改: 这个 legacy 仅写出参数
.pyc文件,而不是.pyo文件无论价值多少 optimize 是。在 3.7 版更改: 这个 invalidation_mode 已添加参数。
在 3.7.2 版更改: 这个 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)
参见
- 模块
py_compile 字节编译单个源文件。