32.11. compileall —字节编译 Python 库
源代码: Lib/compileall.py
该模块提供了一些 Util Function来支持安装 Python 库。这些函数在目录树中编译 Python 源文件。此模块可用于在库安装时创建缓存的字节码文件,从而使这些文件甚至可供没有库目录写权限的用户使用。
32.11.1. 命令行使用
这个模块可以作为脚本(使用 python -m compileall )来编译 Python 源代码。
-
directory
...
-
file
...
- 位置参数是要编译的文件或包含源文件的目录,这些文件是递归遍历的。如果未提供任何参数,则其行为就像命令行是
-l <directories from sys.path>
。
- 位置参数是要编译的文件或包含源文件的目录,这些文件是递归遍历的。如果未提供任何参数,则其行为就像命令行是
-
-l
``- 不要递归到子目录,而只能编译直接包含在命名或隐含目录中的源代码文件。
-
-f
``- 即使时间戳是最新的,也要强制重建。
-
-q
``- 不要打印已编译文件的列表,仅打印错误消息。
-
-d
destdir
- 目录位于要编译的每个文件的路径之前。这将出现在编译时回溯中,并且也将编译到字节码文件中,在执行字节码文件时源文件不存在的情况下,它将在回溯和其他消息中使用。
-
-x
regex
- regex 用于搜索要考虑编译的每个文件的完整路径,如果 regex 产生匹配项,则跳过该文件。
-
-i
list
- 读取文件
list
并将其包含的每一行添加到要编译的文件和目录列表中。如果list
是-
,则从stdin
读取行。
- 读取文件
在 2.7 版中进行了更改:添加了-i
选项。
32.11.2. 公共职能
compileall.
compile_dir
(* dir * [,* maxlevels * [,* ddir * [,* force * [,* rx * [,* quiet *]]]]])- 递归地以* dir *命名的目录树,编译整个
.py
文件。
- 递归地以* dir *命名的目录树,编译整个
- maxlevels *参数用于限制递归的深度;默认为
10
。
如果给定了* ddir *,它会被添加到要编译的每个文件的路径中,以供在编译时回溯中使用,并且还会被编译为字节码文件,在以下情况下,它将在回溯和其他消息中使用:执行字节码文件时源文件不存在。
如果* force *为 true,则即使时间戳是最新的,也将重新编译模块。
如果给定了* rx *,则在要考虑编译的每个文件的完整路径上调用其搜索方法,如果返回的是 true 值,则跳过该文件。
如果* quiet *为 true,则除非发生错误,否则什么都不会打印到标准输出。
compileall.
compile_file
(* fullname * [,* ddir * [,* force * [,* rx * [,* quiet *]]]])- 使用路径* fullname *编译文件。
如果给定了* ddir *,它会被放在要编译的文件的路径中,以供在编译时回溯中使用,并且还会被编译为字节码文件,在以下情况下,它将在回溯和其他消息中使用:执行字节码文件时源文件不存在。
如果给定* rx *,则其搜索方法会将完整路径名传递给正在编译的文件,如果返回的是 true 值,则不编译该文件,并返回True
。
如果* quiet *为 true,则除非发生错误,否则什么都不会打印到标准输出。
2.7 版的新Function。
compileall.
compile_path
([* skip_curdir * [,* maxlevels * [,* force *]]])- 字节编译
sys.path
中找到的所有.py
文件。如果* skip_curdir *为 true(默认值),则当前目录不包括在搜索中。所有其他参数都传递给compile_dir()函数。请注意,与其他编译函数不同,maxlevels
默认为0
。
- 字节编译
要强制重新编译Lib/
子目录及其所有子目录中的所有.py
文件,请执行以下操作:
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)
See also
-
Module py_compile
-
字节编译单个源文件。