如何从.py文件手动生成.pyc文件

时间:2011-04-09 19:28:20

标签: python

出于某种原因,我不能依靠Python的“import”语句自动生成.pyc文件

有没有办法实现以下功能?

def py_to_pyc(py_filepath, pyc_filepath):
    ...

10 个答案:

答案 0 :(得分:208)

您可以在终端中使用compileall。以下命令将递归进入子目录,并为它找到的所有python文件生成pyc文件。 compileall模块是python标准库的一部分,因此您无需安装任何额外的东西即可使用它。这与python2和python3完全相同。

python -m compileall .

答案 1 :(得分:49)

您可以使用以下命令从命令行编译单个文件:

python -m compileall <file_1>.py <file_n>.py

答案 2 :(得分:48)

自从我上次使用Python以来已经有一段时间了,但我相信你可以使用py_compile

import py_compile
py_compile.compile("file.py")

答案 3 :(得分:38)

我找到了几种方法将python脚本编译成字节码

  1. 使用py_compile.compile

    import py_compile
    py_compile.compile('YourFileName.py')
    
  2. 使用py_compile.main()

    它一次编译几个文件。

    import py_compile
    py_compile.main(['File1.py','File2.py','File3.py'])
    

    只要您愿意,列表就可以增长。或者,您显然可以在命令行参数中传递main或偶数文件名中的文件列表。

    或者,如果您在main中传递['-'],那么它可以交互式编译文件。

  3. 在终端中使用py_compile

    python -m py_compile File1.py File2.py File3.py ...
    

    -m指定要编译的模块名称。

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

    python -m py_compile -
    File1.py
    File2.py
    File3.py
       .
       .
       .
    
  4. 使用compileall.compile_dir()

    import compileall
    compileall.compile_dir(direname)
    

    它编译提供的目录中存在的每个Python文件。

  5. 使用compileall.compile_file()

    import compileall
    compileall.compile_file('YourFileName.py')
    
  6. 请看下面的链接:

    https://docs.python.org/3/library/py_compile.html

    https://docs.python.org/3/library/compileall.html

答案 4 :(得分:16)

我会使用compileall。它从脚本和命令行都很好地工作。它比已经提到的py_compile更高级别的模块/工具,它也在内部使用。

答案 5 :(得分:3)

要匹配原始问题要求(源路径和目标路径),代码应该是这样的:

import py_compile
py_compile.compile(py_filepath, pyc_filepath)

如果输入代码有错误,则会引发 py_compile.PyCompileError 异常。

答案 6 :(得分:1)

在Python2中,您可以使用:

python -m compileall <pythonic-project-name>

这将编译包含子文件夹的项目中的所有.py.pyc


在Python3中,您可以使用:

python3 -m compileall <pythonic-project-name>

这将编译包含子文件夹的项目中的所有.py__pycache__文件夹。

或从this post起呈棕褐色:

  

您可以在文件夹中强制执行.pyc文件的布局,与   通过使用Python2:

     

python3 -m compileall -b <pythonic-project-name>

     

选项-b触发.pyc文件到其输出   旧版位置(即与Python2中的相同)。

答案 7 :(得分:1)

有两种方法可以做到这一点

  1. 命令行
  2. 使用python程序

如果使用命令行,请使用python -m compileall <argument>将python代码编译为python二进制代码。 例如:python -m compileall -x ./*

或者, 您可以使用此代码将您的库编译为字节码。

import compileall
import os

lib_path = "your_lib_path"
build_path = "your-dest_path"

compileall.compile_dir(lib_path, force=True, legacy=True)

def compile(cu_path):
    for file in os.listdir(cu_path):
        if os.path.isdir(os.path.join(cu_path, file)):
            compile(os.path.join(cu_path, file))
        elif file.endswith(".pyc"):
            dest = os.path.join(build_path, cu_path ,file)
            os.makedirs(os.path.dirname(dest), exist_ok=True)
            os.rename(os.path.join(cu_path, file), dest)

compile(lib_path)

查看☞ docs.python.org以获得详细文档

答案 8 :(得分:0)

    import py_compile
    py_compile.compile('abc.py')

答案 9 :(得分:0)

  1. 在文件目录中创建一个新的python文件。
  2. 输入 import (the name of the file without the extension)
  3. 运行文件
  4. 打开目录,然后找到pycache文件夹
  5. 里面应该是你的 .pyc 文件