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-hashunchecked-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

忽略指向给定目录外部的符号链接。

如果两个 .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 如果给定,则在考虑编译的每个文件的完整路径上调用其搜索方法,如果返回真值,则跳过该文件。

如果 安静的False0 (默认值)、文件名和其他信息按标准输出打印。设置为 1 ,只打印错误。设置为 2 ,所有输出被抑制。

如果 legacy 如果为真,字节代码文件将被写入它们的旧位置和名称,这可能会覆盖由另一个版本的Python创建的字节代码文件。默认情况是将文件写入 PEP 3147 位置和名称,允许多个版本的python中的字节代码文件共存。

优化 指定编译器的优化级别。它被传递到内置 compile() 功能。还接受一系列优化级别,这些级别导致一个 .py 在一个电话里归档。

参数 工人 指定用于并行编译文件的工作线程数。默认情况下不使用多个工人。如果平台不能使用多个工人, 工人 给出了参数,然后序列编译将用作回退。如果 工人 为0,则使用系统中的核心数。如果 工人 低于 0 ,A ValueError 将被提升。

invalidation_mode 应该是 py_compile.PycInvalidationMode 枚举并控制如何在运行时使生成的Pyc无效。

这个 stripdir公司前置器limit_sl_dest 参数对应于 -s-p-e 上述选项。它们可以指定为 strbytesos.PathLike .

如果 hardlink_dupes 是真的 .pyc 不同优化级别的文件具有相同的内容,使用硬链接合并重复的文件。

在 3.2 版更改: 增加了 legacyoptimize 参数。

在 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_desthardlink_dupes 论据。默认值 最大电平 已从更改 10sys.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 返回。

如果 安静的False0 (默认值)、文件名和其他信息按标准输出打印。设置为 1 ,只打印错误。设置为 2 ,所有输出被抑制。

如果 legacy 如果为真,字节代码文件将被写入它们的旧位置和名称,这可能会覆盖由另一个版本的Python创建的字节代码文件。默认情况是将文件写入 PEP 3147 位置和名称,允许多个版本的python中的字节代码文件共存。

优化 指定编译器的优化级别。它被传递到内置 compile() 功能。还接受一系列优化级别,这些级别导致一个 .py 在一个电话里归档。

invalidation_mode 应该是 py_compile.PycInvalidationMode 枚举并控制如何在运行时使生成的Pyc无效。

这个 stripdir公司前置器limit_sl_dest 参数对应于 -s-p-e 上述选项。它们可以指定为 strbytesos.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_desthardlink_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 版更改: 增加了 legacyoptimize 参数。

在 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

字节编译单个源文件。