py_compile ---编译python源文件

源代码: Lib/py_compile.py


这个 py_compile 模块提供从源文件生成字节代码文件的函数,以及当模块源文件作为脚本调用时使用的另一个函数。

虽然通常不需要,但在安装模块以供共享时,此函数非常有用,特别是当某些用户可能没有权限在包含源代码的目录中写入字节代码缓存文件时。

exception py_compile.PyCompileError

尝试编译文件时发生错误时引发异常。

py_compile.compile(file, cfile=None, dfile=None, doraise=False, optimize=- 1, invalidation_mode=PycInvalidationMode.TIMESTAMP, quiet=0)

Compile a source file to byte-code and write out the byte-code cache file. The source code is loaded from the file named file. The byte-code is written to cfile, which defaults to the PEP 3147/PEP 488 path, ending in .pyc. For example, if file is /foo/bar/baz.py cfile will default to /foo/bar/__pycache__/baz.cpython-32.pyc for Python 3.2. If dfile is specified, it is used as the name of the source file in error messages instead of file. If doraise is true, a PyCompileError is raised when an error is encountered while compiling file. If doraise is false (the default), an error string is written to sys.stderr, but no exception is raised. This function returns the path to byte-compiled file, i.e. whatever cfile value was used.

这个 多莱西安静的 参数决定编译文件时如何处理错误。如果 安静的 是0或1,并且 多莱西 如果为false,则启用默认行为:错误字符串将写入 sys.stderr ,函数返回 None 而不是路径。如果 多莱西 是真的,A PyCompileError 改为引发。但是,如果 安静的 为2,未写入消息,并且 多莱西 没有效果。

如果这条路 c锉 变为(显式指定或计算)符号链接或非常规文件, FileExistsError 将被引发。这是一个警告,如果允许导入将字节编译文件写入这些路径,导入将把这些路径转换为常规文件。这是导入的副作用,使用文件重命名将最终字节编译的文件放置到位,以防止并发文件写入问题。

optimize 控制优化级别并传递给内置 compile() 功能。默认的 -1 选择当前解释器的优化级别。

invalidation_mode 应该是 PycInvalidationMode 枚举并控制生成的字节码缓存在运行时如何失效。默认值为 PycInvalidationMode.CHECKED_HASH 如果 SOURCE_DATE_EPOCH 设置环境变量,否则默认为 PycInvalidationMode.TIMESTAMP .

在 3.2 版更改: 更改的默认值 c锉 成为 PEP 3147 符合标准的以前的默认值是 file + 'c' ('o' 如果启用了优化)。还添加了 optimize 参数。

在 3.4 版更改: 已更改要使用的代码 importlib 用于写入字节码缓存文件。这意味着文件创建/写入语义现在与 importlib 诸如权限、写和移动语义等也增加了警告 FileExistsError 如果 c锉 是符号链接或非常规文件。

在 3.7 版更改: 这个 invalidation_mode 按中的指定添加了参数 PEP 552 . 如果 SOURCE_DATE_EPOCH 设置环境变量, invalidation_mode 将被迫 PycInvalidationMode.CHECKED_HASH .

在 3.7.2 版更改: 这个 SOURCE_DATE_EPOCH 环境变量不再重写 invalidation_mode 参数,并确定其默认值。

在 3.8 版更改: 这个 安静的 已添加参数。

class py_compile.PycInvalidationMode

解释器可用于确定字节码文件是否与源文件一起是最新的方法的枚举。这个 .pyc 文件在其头中指示所需的无效模式。见 缓存字节码无效 有关python如何使无效的详细信息 .pyc 运行时的文件。

3.7 新版功能.

TIMESTAMP

这个 .pyc 文件包含源文件的时间戳和大小,Python将在运行时与源文件的元数据进行比较,以确定 .pyc 需要重新生成文件。

CHECKED_HASH

这个 .pyc 文件包含源文件内容的散列,Python将在运行时与源文件进行比较,以确定 .pyc 需要重新生成文件。

UNCHECKED_HASH

类似于 CHECKED_HASH , the .pyc 文件包含源文件内容的hash。但是,python将在运行时假定 .pyc 文件是最新的,不能验证 .pyc 与源文件完全相反。

.pycs 由类似于构建系统的Python外部的某个系统保持最新。

命令行界面

此模块可以作为脚本调用,以编译多个源文件。中命名的文件 文件名 编译并以正常方式缓存结果字节码。此程序不搜索目录结构来查找源文件;它只编译显式命名的文件。如果其中一个文件无法编译,则退出状态为非零。

<file> ... <fileN>
-

位置参数是要编译的文件。如果 - 是唯一的参数,文件列表取自标准输入。

-q, --quiet

抑制错误输出。

在 3.2 版更改: 为添加了支持 - .

在 3.10 版更改: 为添加了支持 -q .

参见

模块 compileall

在目录树中编译所有python源文件的实用程序。