You are here:  Home » Python » compileall- 字节编译Python库 – Python语言服务(Python教程)(参考资料)

compileall字节编译Python库

源代码: Lib / compileall.py


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

命令行使用

这个模块可以作为一个脚本(使用 python -m compileall )编写Python源代码

directory ...
file ...
位置参数是要编译的文件或包含源文件的目录,递归遍历。如果没有给出参数,则表现得好像命令行是-l <directories from sys.path>.
-l
不要递归到子目录,只编译直接包含在命名或隐含目录中的源代码文件.
-f
即使时间戳是up -to -date,也要强制重建.
-q
不要打印编译的文件列表。如果传递一次,则仍会打印错误消息。如果通过两次(-qq),则所有输出都被抑制.
-d destdir
目录前面是要编译的每个文件的路径。这可以在编译时追溯,也可以编译到thebyte-code文件中,它将用于追踪和其他在执行字节码文件时源文件不存在的消息.
-x regex
regex用于搜索考虑编译的每个文件的完整路径,如果正则表达式产生匹配,则跳过该文件.
-i list
读取文件list并将它包含的每一行添加到列表offiles和目录中进行编译。如果list-,从读取行stdin.
-b
将字节码文件写入其旧位置和名称,这可能会覆盖由另一个版本的Python创建的字节码文件。默认是将文件写入他们的 PEP 3147 位置和名称,允许来自多个Python版本的字节代码文件共存.
-r
控制子目录的最大递归级别。如果给出,那么-l选项将不会被考虑在内.python -m compileall&lt; directory&gt;-r 0 相当于 python -m compileall&lt; directory&gt;-l .
-j N
使用N工作者编译给定目录中的文件。如果使用0,则使用os.cpu_count()的结果.
--invalidation-mode [timestamp|checked-hash|unchecked-hash]
控制生成的字节码文件在运行时如何失效.timestamp值,表示.pyc将生成嵌入了源时间戳和大小的文件。checked-hashunchecked-hash值会导致生成基于哈希的pyc。Hash-basedpycs嵌入了源文件内容的哈希值而不是时间戳。请参阅缓存的字节码失效有关Python如何在运行时验证字节码缓存文件的更多信息。默认为timestamp如果没有设置SOURCE_DATE_EPOCH环境变量,和checked-hash如果设置了SOURCE_DATE_EPOCH环境变量

更改版本3.2:添加了-i, -b-h options.

在版本3.5中更改:添加了-j, -r-qq选项。-q选项已更改为多级值。-b将始终生成以.pyc结尾的abyte-code文件,从不.pyo.

在版本3.7中更改:添加了--invalidation-mode参数。

没有命令行选项来控制compile()函数使用的优化级别,因为Python解释器本身提供了选项: python -O -m compileall.

公共函数

compileall.compile_dirdir, maxlevels=10, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1, invalidation_mode=py_compile.PycInvalidationMode.TIMESTAMP
递归下降dir命名的目录树,编译所有.py一路上的文件。如果所有文件编译成功则返回true值,否则返回false值

// maxlevels参数用于限制递归的深度;itdefaults to 10.

如果ddir给出了它,它被添加到编译时用于编译时间回溯的每个文件的路径,并且也被编译到字节代码文件中,它将用于回溯和其他源文件不存在的消息中。字节码文件被执行的时间.

如果force是真的,即使时间戳有问题也会重新编译模块.

如果rx给出,它的搜索方法是在考虑编译的每个文件的完整路径上调用的,如果它返回一个真值,则跳过该文件.

如果quietFalse0(默认值),文件名和其他信息打印到标准输出。设置为1,仅打印错误。设置为2,所有输出都被抑制.

如果legacy为真,则将字节码文件写入其旧位置和名称,这可能会覆盖创建的字节码文件另一个版本的Python。默认是将文件写入他们的 PEP 3147 位置和名称,允许来自多个版本的Python的字节码文件tocoexist.

optimize指定编译器的优化级别。它通过内置的compile()功能

参数workers指定并行使用多少个工作程序编译文件。默认是不使用多个worker。如果平台不能使用多个worker和workers给出了参数,然后顺序编译将用作后备。如果workers比浅0, 一个 ValueError会被提出来

invalidation_mode应该是py_compile.PycInvalidationMode枚举并控制generatepycs在运行时如何失效.

更改版本3.2:添加了legacyoptimize参数.

在版本3.5中更改:添加了workers参数

更改版本3.5:quiet参数更改为多级值.

更改版本3.5: legacy参数只写出.pyc文件,而不是.pyofiles无论optimize的价值是什么

在版本3.6中更改:接受路径类对象.

在版本3.7中更改:添加了invalidation_mode参数.

compileall.compile_file (fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, invalidation_mode=py_compile.PycInvalidationMode.TIMESTAMP)
用路径fullname编制文件。如果文件编译成功,则返回true值,否则返回false值

如果给出ddir,则它被添加到正在编译的文件的路径中以用于编译时间回溯,并且也编译到thebyte-code文件中,它将用于追溯和其他在执行字节码文件时源文件不存在的消息.

如果rx给出,它的搜索方法被传递给正在编译的文件的完整路径名,如果它返回一个真值,则文件不被编译并且True被返回.

如果quietFalse0(默认值),文件名和其他信息打印到标准输出。设置为1,仅打印错误。设为2,所有输出都被抑制.

如果legacy确实如此,字节码文件被写入其遗留位置和名称,这可能会覆盖由另一个版本的Python创建的字节码文件。默认是将文件写入其PEP 3147 位置和名称,允许来自多个版本的Python的字节码文件tocoexist.

optimize指定编译器的优化级别。它被传递到内置的compile()function

invalidation_mode应该是py_compile.PycInvalidationMode枚举的成员,并控制生成的pyc在运行时如何失效.

新版本3.2.

更改版本3.5:quiet参数更改为多级值.

更改版本3.5: legacy参数只写出.pyc文件,而不是.pyo files无论optimize的价值是什么

更改版本3.7:invalidation_mode参数被添加了

compileall.compile_pathskip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-1, invalidation_mode=py_compile.PycInvalidationMode.TIMESTAMP
字节编译所有.py沿发现的文件sys.path。如果所有文件编译成功则返回atrue值,否则返回false值

/skip_curdir如果为true(默认值),则当前目录不包含在搜索中。所有其他参数都传递给compile_dir()函数。请注意,与其他编译函数不同,maxlevels默认为0.

在版本3.2中更改:添加了legacyoptimize参数。

在版本3.5中更改:quiet参数已更改为多级值.

在版本3.5中更改:legacy参数只写出.pyc文件,而不是.pyofiles无论optimizeis.

更改版本3.7: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
字节编译单个源文件.

评论被关闭。