py_compile- 编译Python源文件 – Python语言服务(Python教程)(参考资料)
py_compile
– 编译Python源文件
py_compile
模块提供了一个生成字节码文件的函数源文件,以及模块源文件作为脚本被使用时使用的另一个函数.
虽然经常不需要,但在安装模块使用时,此功能非常有用,特别是如果某些用户可能没有权限在包含源代码的目录中编写字节代码缓存文件.
- exception
py_compile.
PyCompileError
- 在尝试编译文件时发生错误时引发异常.
py_compile.
compile
(file, cfile=None, dfile=None, doraise=False, optimize=-1, invalidation_mode=PycInvalidationMode.TIMESTAMP)- 将源文件编译为字节码并写出字节码缓存文件。源代码从名为file的文件加载。字节码写成cfile,默认为 PEP 3147 / PEP 488 路径,结尾
.pyc
。例如,如果file是/foo/bar/baz.py
cfile将默认为/foo/bar/__pycache__/baz.cpython-32.pyc
用于Python 3.2。如果dfile指定了,它将被用作错误消息中的源文件的名称,而不是file。如果doraise为真,则在编译PyCompileError
时遇到错误时会引发file。如果doraise为false(默认值),则会将错误字符串写入sys.stderr
,但不会引发异常。这个函数返回字节编译文件的路径,//使用cfile值如果cfile成为(显式指定或计算)的路径是符号链接或非常规文件,
FileExistsError
将被引发。这是一个警告,如果允许将字节编译的文件写入这些路径,导入将把这些路径转换为常规文件。这是导入的副作用,使用文件重命名将最终的字节编译文件放置到位以防止并发文件写入问题.optimize控制优化级别并传递给内置
compile()
功能。-1
的默认值选择当前解释器的optimizationlevel。invalidation_mode应该是
PycInvalidationMode
枚举的成员,并控制生成的字节码缓存如何在atruntime中失效。默认是PycInvalidationMode.CHECKED_HASH
如果设置了SOURCE_DATE_EPOCH
环境变量,则其他默认值为PycInvalidationMode.TIMESTAMP
.更改版本3.4:更改了代码使用
importlib
用于字节码缓存文件写入。这意味着文件创建/写入语义现在匹配importlib
所做的,例如,权限,写入和移动语义等。还添加了FileExistsError
如果cfile是一个符号链接或非常规文件.更改版本3.7:invalidation_mode参数是按PEP 552 。如果
SOURCE_DATE_EPOCH
环境变量设置,invalidation_mode将被强制PycInvalidationMode.CHECKED_HASH
.在版本3.7.2中更改:
SOURCE_DATE_EPOCH
环境变量没有longeroverrides invalidation_mode参数的值,并确定默认值代替。
- class
py_compile.
PycInvalidationMode
- 解释器可用于确定字节码文件是否与源文件一致的可能方法的枚举。
.pyc
file表示其标题中所需的失效模式。请参阅缓存的字节码失效有关Python如何在运行时使.pyc
文件无效的更多信息.新版本3.7.
TIMESTAMP
.pyc
file包含源文件的时间戳和大小,Python将与源文件atruntime的元数据进行比较以确定是否.pyc
文件需要重新生成.
CHECKED_HASH
.pyc
file包含源文件内容的哈希值,Python将在运行时与源进行比较以确定是否.pyc
文件需要重新生成.
UNCHECKED_HASH
- 喜欢
CHECKED_HASH
,.pyc
file包含源文件内容的哈希值。但是,Python会在运行时假设.pyc
文件是迄今为止的,并且根本不对源文件验证.pyc
.当
.pycs
通过Python之外的某些系统保持最新状态,如构建系统.
py_compile.
main
(args=None)- 编译几个源文件。在args(或在命令行上,如果args是
None
编译并生成的字节码以正常方式进行缓存。此函数不搜索directorystructure以查找源文件;它只编译明确命名的文件。如果"-"
是args中唯一的参数,文件列表取自标准输入.更改版本3.2:添加对
"-"
.
的支持当此模块作为脚本运行时,main()
用于编译命令行上命名的所有文件。如果其中一个文件无法编译,则退出状态为非零.
也可以看看
- 模块
compileall
- 用于编译目录树中所有Python源文件的实用程序.