32.11. compileall — 字节编译 Python 库

源代码: Lib/compileall.py


此模块提供一些实用函数来支持安装 Python 库。这些函数编译目录树下的 Python 源文件。此模块可以用于在库安装时创建缓存字节码文件,即使用户没有库目录写入权限也可以使用它们。

32.11.1. 命令行用法

此模块可以作为脚本工作 (使用 python -m compileall ) 以编译 Python 源代码。

directory ...
file ...

Positional arguments are files to compile or directories that contain source files, traversed recursively. If no argument is given, behave as if the command line was -l <directories from sys.path> .

-l

Do not recurse into subdirectories, only compile source code files directly contained in the named or implied directories.

-f

Force rebuild even if timestamps are up-to-date.

-q

Do not print the list of files compiled, print only error messages.

-d destdir

Directory prepended to the path to each file being compiled. This will appear in compilation time tracebacks, and is also compiled in to the byte-code file, where it will be used in tracebacks and other messages in cases where the source file does not exist at the time the byte-code file is executed.

-x regex

regex is used to search the full path to each file considered for compilation, and if the regex produces a match, the file is skipped.

-i list

读取文件 list and add each line that it contains to the list of files and directories to compile. If list is - ,读取行从 stdin .

-b

Write the byte-code files to their legacy locations and names, which may overwrite byte-code files created by another version of Python. The default is to write files to their PEP 3147 locations and names, which allows byte-code files from multiple versions of Python to coexist.

3.2 版改变: 添加 -i , -b and -h 选项。

There is no command-line option to control the optimization level used by the compile() function, because the Python interpreter itself already provides the option: python -O -m compileall .

32.11.2. 公共函数

compileall. compile_dir ( dir , maxlevels=10 , ddir=None , force=False , rx=None , quiet=False , legacy=False , optimize=-1 )

Recursively descend the directory tree named by dir , compiling all .py files along the way.

The maxlevels parameter is used to limit the depth of the recursion; it defaults to 10 .

ddir is given, it is prepended to the path to each file being compiled for use in compilation time tracebacks, and is also compiled in to the byte-code file, where it will be used in tracebacks and other messages in cases where the source file does not exist at the time the byte-code file is executed.

force is true, modules are re-compiled even if the timestamps are up to date.

rx is given, its search method is called on the complete path to each file considered for compilation, and if it returns a true value, the file is skipped.

quiet is true, nothing is printed to the standard output unless errors occur.

legacy is true, byte-code files are written to their legacy locations and names, which may overwrite byte-code files created by another version of Python. The default is to write files to their PEP 3147 locations and names, which allows byte-code files from multiple versions of Python to coexist.

optimize specifies the optimization level for the compiler. It is passed to the built-in compile() 函数。

3.2 版改变: 添加 legacy and optimize 参数。

compileall. compile_file ( fullname , ddir=None , force=False , rx=None , quiet=False , legacy=False , optimize=-1 )

Compile the file with path fullname .

ddir is given, it is prepended to the path to the file being compiled for use in compilation time tracebacks, and is also compiled in to the byte-code file, where it will be used in tracebacks and other messages in cases where the source file does not exist at the time the byte-code file is executed.

rx is given, its search method is passed the full path name to the file being compiled, and if it returns a true value, the file is not compiled and True 被返回。

quiet is true, nothing is printed to the standard output unless errors occur.

legacy is true, byte-code files are written to their legacy locations and names, which may overwrite byte-code files created by another version of Python. The default is to write files to their PEP 3147 locations and names, which allows byte-code files from multiple versions of Python to coexist.

optimize specifies the optimization level for the compiler. It is passed to the built-in compile() 函数。

3.2 版新增。

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

字节编译所有 .py files found along sys.path 。若 skip_curdir is true (the default), the current directory is not included in the search. All other parameters are passed to the compile_dir() function. Note that unlike the other compile functions, maxlevels 默认为 0 .

3.2 版改变: 添加 legacy and optimize 参数。

要强制重新编译所有 .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)
					

另请参阅

模块 py_compile
字节编译单个源文件。