问题:如何从.py文件手动生成.pyc文件
由于某种原因,我不能依靠Python的“ import”语句来自动生成.pyc文件
有没有一种方法可以实现以下功能?
def py_to_pyc(py_filepath, pyc_filepath):
    ...回答 0
您可以compileall在终端中使用。以下命令将递归进入子目录,并为找到的所有python文件创建pyc文件。该compileall模块是Python标准库的一部分,所以你不需要安装任何额外的使用它。这对于python2和python3完全相同。
python -m compileall .回答 1
您可以使用以下命令从命令行编译单个文件:
python -m compileall <file_1>.py <file_n>.py回答 2
自从我上一次使用Python已经有一段时间了,但是我相信您可以使用py_compile:
import py_compile
py_compile.compile("file.py")回答 3
我发现了几种将python脚本编译成字节码的方法
- py_compile在终端中使用:- python -m py_compile File1.py File2.py File3.py ...- -m指定要编译的模块名称。- 或者,用于文件的交互式编译 - python -m py_compile - File1.py File2.py File3.py . . .
- 使用 - py_compile.compile:- import py_compile py_compile.compile('YourFileName.py')
- 使用 - py_compile.main():- 它一次编译几个文件。 - import py_compile py_compile.main(['File1.py','File2.py','File3.py'])- 该列表可以根据需要增加。或者,您显然可以在命令行args中传递主要甚至文件名中的文件列表。 - 或者,如果您传入 - ['-']main,则它可以交互式地编译文件。
- 使用 - compileall.compile_dir():- import compileall compileall.compile_dir(direname)- 它编译提供的目录中存在的每个Python文件。 
- 使用 - compileall.compile_file():- import compileall compileall.compile_file('YourFileName.py')
看一下下面的链接:
回答 4
我会用compileall。从脚本和命令行都可以很好地工作。它比已经在内部使用的py_compile更高级别的模块/工具。
回答 5
在Python2中,您可以使用:
python -m compileall <pythonic-project-name>这样就可以全部编译.py到.pyc包含子文件夹的项目中。
在Python3中,您可以使用:
python3 -m compileall <pythonic-project-name>这样就可以全部编译.py到__pycache__项目中包含子文件夹的文件夹中。
或从这篇文章中褐变:
您可以
.pyc使用以下命令在文件夹中强制执行与Python2中相同的文件布局:
python3 -m compileall -b <pythonic-project-name>该选项
-b触发.pyc文件输出到其旧位置(即与Python2中相同)。
回答 6
为了匹配原始问题要求(源路径和目标路径),代码应如下所示:
import py_compile
py_compile.compile(py_filepath, pyc_filepath)如果输入代码有错误,则会引发py_compile.PyCompileError异常。
回答 7
有两种方法可以做到这一点
- 命令行
- 使用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详细资料

