问题:如何从.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 -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详细资料