ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
### 导航 - [索引](../genindex.xhtml "总目录") - [模块](../py-modindex.xhtml "Python 模块索引") | - [下一页](dis.xhtml "dis --- Python 字节码反汇编器") | - [上一页](py_compile.xhtml "py_compile --- Compile Python source files") | - ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png) - [Python](https://www.python.org/) » - zh\_CN 3.7.3 [文档](../index.xhtml) » - [Python 标准库](index.xhtml) » - [Python 语言服务](language.xhtml) » - $('.inline-search').show(0); | # [`compileall`](#module-compileall "compileall: Tools for byte-compiling all Python source files in a directory tree.") --- Byte-compile Python libraries **Source code:** [Lib/compileall.py](https://github.com/python/cpython/tree/3.7/Lib/compileall.py) \[https://github.com/python/cpython/tree/3.7/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. ## 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. `-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. If `list` is `-`, read lines from `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**](https://www.python.org/dev/peps/pep-3147) \[https://www.python.org/dev/peps/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 of [`os.cpu_count()`](os.xhtml#os.cpu_count "os.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. The `checked-hash` and `unchecked-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 [已缓存字节码的失效](../reference/import.xhtml#pyc-invalidation) for more information on how Python validates bytecode cache files at runtime. The default is `timestamp` if the `SOURCE_DATE_EPOCH` environment variable is not set, and `checked-hash` if the `SOURCE_DATE_EPOCH`environment variable is set. 在 3.2 版更改: Added the `-i`, `-b` and `-h` options. 在 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`. 在 3.7 版更改: Added the `--invalidation-mode` option. There is no command-line option to control the optimization level used by the [`compile()`](functions.xhtml#compile "compile") function, because the Python interpreter itself already provides the option: **python -O -m compileall**. ## Public functions `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*)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 `10`. 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. If *quiet* is `False` or `0` (the default), the filenames and other information are printed to standard out. Set to `1`, only errors are printed. Set to `2`, 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**](https://www.python.org/dev/peps/pep-3147) \[https://www.python.org/dev/peps/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()`](functions.xhtml#compile "compile") function. 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 lower than `0`, a [`ValueError`](exceptions.xhtml#ValueError "ValueError") will be raised. *invalidation\_mode* should be a member of the [`py_compile.PycInvalidationMode`](py_compile.xhtml#py_compile.PycInvalidationMode "py_compile.PycInvalidationMode") enum and controls how the generated pycs are invalidated at runtime. 在 3.2 版更改: Added the *legacy* and *optimize* parameter. 在 3.5 版更改: Added the *workers* parameter. 在 3.5 版更改: *quiet* parameter was changed to a multilevel value. 在 3.5 版更改: The *legacy* parameter only writes out `.pyc` files, not `.pyo` files no matter what the value of *optimize* is. 在 3.6 版更改: 接受一个 [类路径对象](../glossary.xhtml#term-path-like-object)。 在 3.7 版更改: The *invalidation\_mode* parameter was added. `compileall.``compile_file`(*fullname*, *ddir=None*, *force=False*, *rx=None*, *quiet=0*, *legacy=False*, *optimize=-1*, *invalidation\_mode=py\_compile.PycInvalidationMode.TIMESTAMP*)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 and `True` is returned. If *quiet* is `False` or `0` (the default), the filenames and other information are printed to standard out. Set to `1`, only errors are printed. Set to `2`, 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**](https://www.python.org/dev/peps/pep-3147) \[https://www.python.org/dev/peps/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()`](functions.xhtml#compile "compile") function. *invalidation\_mode* should be a member of the [`py_compile.PycInvalidationMode`](py_compile.xhtml#py_compile.PycInvalidationMode "py_compile.PycInvalidationMode") enum and controls how the generated pycs are invalidated at runtime. 3\.2 新版功能. 在 3.5 版更改: *quiet* parameter was changed to a multilevel value. 在 3.5 版更改: The *legacy* parameter only writes out `.pyc` files, not `.pyo` files no matter what the value of *optimize* is. 在 3.7 版更改: The *invalidation\_mode* parameter was added. `compileall.``compile_path`(*skip\_curdir=True*, *maxlevels=0*, *force=False*, *quiet=0*, *legacy=False*, *optimize=-1*, *invalidation\_mode=py\_compile.PycInvalidationMode.TIMESTAMP*)Byte-compile all the `.py` files found along `sys.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()`](#compileall.compile_dir "compileall.compile_dir")function. Note that unlike the other compile functions, `maxlevels`defaults to `0`. 在 3.2 版更改: Added the *legacy* and *optimize* parameter. 在 3.5 版更改: *quiet* parameter was changed to a multilevel value. 在 3.5 版更改: The *legacy* parameter only writes out `.pyc` files, not `.pyo` files no matter what the value of *optimize* is. 在 3.7 版更改: The *invalidation\_mode* parameter was added. 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) ``` 参见 模块 [`py_compile`](py_compile.xhtml#module-py_compile "py_compile: Generate byte-code files from Python source files.")Byte-compile a single source file. ### 导航 - [索引](../genindex.xhtml "总目录") - [模块](../py-modindex.xhtml "Python 模块索引") | - [下一页](dis.xhtml "dis --- Python 字节码反汇编器") | - [上一页](py_compile.xhtml "py_compile --- Compile Python source files") | - ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png) - [Python](https://www.python.org/) » - zh\_CN 3.7.3 [文档](../index.xhtml) » - [Python 标准库](index.xhtml) » - [Python 语言服务](language.xhtml) » - $('.inline-search').show(0); | © [版权所有](../copyright.xhtml) 2001-2019, Python Software Foundation. Python 软件基金会是一个非盈利组织。 [请捐助。](https://www.python.org/psf/donations/) 最后更新于 5月 21, 2019. [发现了问题](../bugs.xhtml)? 使用[Sphinx](http://sphinx.pocoo.org/)1.8.4 创建。