📜  如何在Python中生成字节码文件?

📅  最后修改于: 2022-05-13 01:55:50.535000             🧑  作者: Mango

如何在Python中生成字节码文件?

每当Python脚本编译时,它会自动生成一个编译后的代码,称为字节码。字节码实际上并没有被解释为机器码,除非有一些特殊的实现,比如 PyPy。

字节码被加载到Python运行时并由虚拟机解释,虚拟机是一段代码,读取字节码中的每条指令并执行指示的任何操作。

当第一次导入Python的模块时,或者当源比当前编译的文件更新时,字节码会自动创建在与 .py 文件相同的目录中。下次运行程序时, Python解释器使用此文件跳过编译步骤。

运行脚本不被视为导入,并且不会创建 .pyc 文件。例如,让我们编写一个脚本文件abc.py来导入另一个模块xyz.py 。现在运行abc.py文件,由于 xyz 被导入, xyz.pyc将被创建,但由于abc.py没有被导入,因此不会创建abc.pyc文件。

但是存在一个内置的py_compile编译所有模块和命令,这有助于创建 .pyc 文件。

  1. 使用py_compile.compile函数: py_compile模块可以手动编译任何模块。一种方法是交互地使用该模块中的 py_compile.compile函数:
    >>> import py_compile
    >>> py_compile.compile('abc.py')
    

    这会将 .pyc 写入与 abc.py 相同的位置。

  2. 使用py_compile.main()函数:一次编译多个文件。
    >>> import py_compile
    >>> py_compile.main(['File1.py','File2.py','File3.py'])
    
  3. 使用compileall.compile_dir()函数:它编译提供的目录中存在的每个Python文件。
    >>> import compileall
    >>> compileall.compile_dir(directoryname)
    
  4. 在终端中使用py_compile
    $ python -m py_compile File1.py File2.py File3.py ...
    

    或者,对于文件的交互式编译

    $ python -m py_compile -
      File1.py
      File2.py
      File3.py
       .
       .
       .
    
  5. 在终端中使用compileall :此命令将自动递归进入子目录并为它找到的所有Python文件生成 .pyc 文件。
    $ python -m compileall 
    

注意compileallpy_compile模块是Python标准库的一部分,所以不需要安装任何额外的东西来使用它。

参考:
1. https://文档。 Python.org/3/library/py_compile.html
2. https://文档。 Python.org/2/library/compileall.html
3. 埃夫博特