compileall — Byte-compile Python libraries - Python 3.11.1 documentation 编辑
Source code: Lib/compileall.py
This module provides some utility functions to support installing Python libraries. These functions compile Python source files in a directory tree. This module can be used to create the cached byte-code files at library installation time, which makes them available for use even by users who don’t have write permission to the library directories.
Availability: not Emscripten, not WASI.
This module does not work or is not available on WebAssembly platforms wasm32-emscripten
and wasm32-wasi
. See WebAssembly platforms for more information.
Command-line use
This module can work as a script (using python -m compileall) to compile Python sources.
- 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. If passed once, error messages will still be printed. If passed twice (
-qq
), all output is suppressed.
- -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.
- -s strip_prefix
- -p prepend_prefix
Remove (
-s
) or append (-p
) the given prefix of paths recorded in the.pyc
files. Cannot be combined with-d
.
- -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
Read the file
list
and add each line that it contains to the list of files and directories to compile. Iflist
is-
, read lines fromstdin
.
- -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.
- -r
Control the maximum recursion level for subdirectories. If this is given, then
-l
option will not be taken into account. python -m compileall <directory> -r 0 is equivalent to python -m compileall <directory> -l.
- -j N
Use N workers to compile the files within the given directory. If
0
is used, then the result ofos.cpu_count()
will be used.
- --invalidation-mode [timestamp|checked-hash|unchecked-hash]
Control how the generated byte-code files are invalidated at runtime. The
timestamp
value, means that.pyc
files with the source timestamp and size embedded will be generated. Thechecked-hash
andunchecked-hash
values cause hash-based pycs to be generated. Hash-based pycs embed a hash of the source file contents rather than a timestamp. See Cached bytecode invalidation for more information on how Python validates bytecode cache files at runtime. The default istimestamp
if theSOURCE_DATE_EPOCH
environment variable is not set, andchecked-hash
if theSOURCE_DATE_EPOCH
environment variable is set.
- -o level
Compile with the given optimization level. May be used multiple times to compile for multiple levels at a time (for example,
compileall -o 1 -o 2
).
- -e dir
Ignore symlinks pointing outside the given directory.
- --hardlink-dupes
If two
.pyc
files with different optimization level have the same content, use hard links to consolidate duplicate files.
Changed in version 3.2: Added the -i
, -b
and -h
options.
Changed in version 3.5: Added the -j
, -r
, and -qq
options. -q
option was changed to a multilevel value. -b
will always produce a byte-code file ending in .pyc
, never .pyo
.
Changed in version 3.7: Added the --invalidation-mode
option.
Changed in version 3.9: Added the -s
, -p
, -e
and --hardlink-dupes
options. Raised the default recursion limit from 10 to sys.getrecursionlimit()
. Added the possibility to specify the -o
option multiple times.
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.
Similarly, the compile()
function respects the sys.pycache_prefix
setting. The generated bytecode cache will only be useful if compile()
is run with the same sys.pycache_prefix
(if any) that will be used at runtime.
Public functions
- 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)
Recursively descend the directory tree named by dir, compiling all
.py
files along the way. Return a true value if all the files compiled successfully, and a false value otherwise.The maxlevels parameter is used to limit the depth of the recursion; it defaults to
sys.getrecursionlimit()
.If 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.
If force is true, modules are re-compiled even if the timestamps are up to date.
If 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. This can be used to exclude files matching a regular expression, given as a re.Pattern object.If quiet is
False
or0
(the default), the filenames and other information are printed to standard out. Set to1
, only errors are printed. Set to2
, all output is suppressed.If 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()
function. Accepts also a sequence of optimization levels which lead to multiple compilations of one.py
file in one call.The argument workers specifies how many workers are used to compile files in parallel. The default is to not use multiple workers. If the platform can’t use multiple workers and workers argument is given, then sequential compilation will be used as a fallback. If workers is 0, the number of cores in the system is used. If workers is lower than
0
, aValueError
will be raised.invalidation_mode should be a member of the
py_compile.PycInvalidationMode
enum and controls how the generated pycs are invalidated at runtime.The stripdir, prependdir and limit_sl_dest arguments correspond to the
-s
,-p
and-e
options described above. They may be specified asstr
oros.PathLike
.If hardlink_dupes is true and two
.pyc
files with different optimization level have the same content, use hard links to consolidate duplicate files.Changed in version 3.2: Added the legacy and optimize parameter.
Changed in version 3.5: Added the workers parameter.
Changed in version 3.5: quiet parameter was changed to a multilevel value.
Changed in version 3.5: The legacy parameter only writes out
.pyc
files, not.pyo
files no matter what the value of optimize is.Changed in version 3.6: Accepts a path-like object.
Changed in version 3.7: The invalidation_mode parameter was added.
Changed in version 3.7.2: The invalidation_mode parameter’s default value is updated to None.
Changed in version 3.8: Setting workers to 0 now chooses the optimal number of cores.
Changed in version 3.9: Added stripdir, prependdir, limit_sl_dest and hardlink_dupes arguments. Default value of maxlevels was changed from
10
tosys.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)
Compile the file with path fullname. Return a true value if the file compiled successfully, and a false value otherwise.
If 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.
If 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 andTrue
is returned. This can be used to exclude files matching a regular expression, given as a re.Pattern object.If quiet is
False
or0
(the default), the filenames and other information are printed to standard out. Set to1
, only errors are printed. Set to2
, all output is suppressed.If 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()
function. Accepts also a sequence of optimization levels which lead to multiple compilations of one.py
file in one call.invalidation_mode should be a member of the
py_compile.PycInvalidationMode
enum and controls how the generated pycs are invalidated at runtime.The stripdir, prependdir and limit_sl_dest arguments correspond to the
-s
,-p
and-e
options described above. They may be specified asstr
oros.PathLike
.If hardlink_dupes is true and two
.pyc
files with different optimization level have the same content, use hard links to consolidate duplicate files.New in version 3.2.
Changed in version 3.5: quiet parameter was changed to a multilevel value.
Changed in version 3.5: The legacy parameter only writes out
.pyc
files, not.pyo
files no matter what the value of optimize is.Changed in version 3.7: The invalidation_mode parameter was added.
Changed in version 3.7.2: The invalidation_mode parameter’s default value is updated to None.
Changed in version 3.9: Added stripdir, prependdir, limit_sl_dest and hardlink_dupes arguments.
- compileall.compile_path(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=- 1, invalidation_mode=None)
Byte-compile all the
.py
files found alongsys.path
. Return a true value if all the files compiled successfully, and a false value otherwise.If 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
defaults to0
.Changed in version 3.2: Added the legacy and optimize parameter.
Changed in version 3.5: quiet parameter was changed to a multilevel value.
Changed in version 3.5: The legacy parameter only writes out
.pyc
files, not.pyo
files no matter what the value of optimize is.Changed in version 3.7: The invalidation_mode parameter was added.
Changed in version 3.7.2: The invalidation_mode parameter’s default value is updated to None.
To force a recompile of all the .py
files in the Lib/
subdirectory and all its subdirectories:
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)
See also
- Module
py_compile
Byte-compile a single source file.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论