字节编译 Python 库
Python 是一种基于解释器的语言。但是,当运行脚本(.py 扩展名)时,它会在内部将源代码编译为字节码,然后自动删除字节码版本。当第一次导入模块(除了预编译的内置模块)时,也会自动构建其编译版本,但会以 .pyc 扩展名保存在 __pycache__ 文件夹中。随后再次调用导入同一模块不会重新编译模块,而是使用已构建的模块。
但是,可以显式编译具有 .py 扩展名的 Python 脚本文件,而无需运行它。**'py_compile'** 模块为此目的包含 **'compile()'** 函数。生成的 .pyc 文件的名称由 Python 的版本号附加。对于 Python 3.7,名称具有 'cpython-37' 后缀。
通常不需要此模块。但是,在安装供共享使用的模块时它可能很有用,尤其是一些用户没有权限在包含源代码的目录中写入字节码缓存文件。
该模块具有命令行界面。可以使用 –m 开关如下导入它
E:\python37>python -m py_compile hello.py
这将在 __pycache__ 子文件夹中创建并存储 'hello.cpython-37.pyc' 文件。
字节编译也可以使用 py_compile 模块中的 compile() 函数以编程方式完成。
import py_compile
py_compile.compile("hello.py")具有 .pyc 扩展名的字节码文件可以直接从命令行执行,就像具有 .py 扩展名的普通脚本一样。
E:\python37>python __pycache__/hello.cpython-37.pyc
但是,它可以由与编译字节码文件相同的版本的解释器执行。如果我们尝试使用 Python 的任何其他版本运行它,则会显示以下错误。
C:\python36>python e:hello.cpython-37.pyc RuntimeError: Bad magic number in .pyc file
py_compile 模块还有另一个函数 main(),它编译多个源文件。名为参数的文件被编译,生成的字节码以正常方式缓存。此函数不会搜索目录结构以查找源文件;它仅编译显式命名的文件。
该模块还定义了 PyCompileError 异常,当尝试编译文件时发生错误时会引发此异常。(仅当为 compile() 函数将 doraise 选项设置为 True 时才会引发此异常。)
compile() 函数的 optimize 选项控制优化级别,并传递给内置的 compile() 函数。-1 的默认值选择当前解释器的优化级别。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP