如何在Python中生成字节码文件?
每当Python脚本编译时,它会自动生成一个编译后的代码,称为字节码。字节码实际上并没有被解释为机器码,除非有一些特殊的实现,比如 PyPy。
字节码被加载到Python运行时并由虚拟机解释,虚拟机是一段代码,读取字节码中的每条指令并执行指示的任何操作。
当第一次导入Python的模块时,或者当源比当前编译的文件更新时,字节码会自动创建在与 .py 文件相同的目录中。下次运行程序时, Python解释器使用此文件跳过编译步骤。
运行脚本不被视为导入,并且不会创建 .pyc 文件。例如,让我们编写一个脚本文件abc.py来导入另一个模块xyz.py 。现在运行abc.py文件,由于 xyz 被导入, xyz.pyc将被创建,但由于abc.py没有被导入,因此不会创建abc.pyc文件。
但是存在一个内置的py_compile和编译所有模块和命令,这有助于创建 .pyc 文件。
- 使用py_compile.compile函数: py_compile模块可以手动编译任何模块。一种方法是交互地使用该模块中的 py_compile.compile函数:
>>> import py_compile >>> py_compile.compile('abc.py')
这会将 .pyc 写入与 abc.py 相同的位置。
- 使用py_compile.main()函数:一次编译多个文件。
>>> import py_compile >>> py_compile.main(['File1.py','File2.py','File3.py'])
- 使用compileall.compile_dir()函数:它编译提供的目录中存在的每个Python文件。
>>> import compileall >>> compileall.compile_dir(directoryname)
- 在终端中使用py_compile :
$ python -m py_compile File1.py File2.py File3.py ...
或者,对于文件的交互式编译
$ python -m py_compile - File1.py File2.py File3.py . . .
- 在终端中使用compileall :此命令将自动递归进入子目录并为它找到的所有Python文件生成 .pyc 文件。
$ python -m compileall
注意: compileall和py_compile模块是Python标准库的一部分,所以不需要安装任何额外的东西来使用它。
参考:
1. https://文档。 Python.org/3/library/py_compile.html
2. https://文档。 Python.org/2/library/compileall.html
3. 埃夫博特