出于某种原因,我不能依靠Python的“import”语句自动生成.pyc文件
有没有办法实现以下功能?
def py_to_pyc(py_filepath, pyc_filepath):
...
答案 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脚本编译成字节码
使用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'])
只要您愿意,列表就可以增长。或者,您显然可以在命令行参数中传递main或偶数文件名中的文件列表。
或者,如果您在main中传递['-']
,那么它可以交互式编译文件。
在终端中使用py_compile
:
python -m py_compile File1.py File2.py File3.py ...
-m
指定要编译的模块名称。
或者,对于文件的交互式编译
python -m py_compile -
File1.py
File2.py
File3.py
.
.
.
使用compileall.compile_dir()
:
import compileall
compileall.compile_dir(direname)
它编译提供的目录中存在的每个Python文件。
使用compileall.compile_file()
:
import compileall
compileall.compile_file('YourFileName.py')
请看下面的链接:
答案 4 :(得分:16)
我会使用compileall。它从脚本和命令行都很好地工作。它比已经提到的py_compile更高级别的模块/工具,它也在内部使用。
答案 5 :(得分:3)
要匹配原始问题要求(源路径和目标路径),代码应该是这样的:
import py_compile
py_compile.compile(py_filepath, pyc_filepath)
如果输入代码有错误,则会引发 py_compile.PyCompileError 异常。
答案 6 :(得分:1)
python -m compileall <pythonic-project-name>
这将编译包含子文件夹的项目中的所有.py
至.pyc
。
python3 -m compileall <pythonic-project-name>
这将编译包含子文件夹的项目中的所有.py
到__pycache__
文件夹。
或从this post起呈棕褐色:
您可以在文件夹中强制执行
.pyc
文件的布局,与 通过使用Python2:
python3 -m compileall -b <pythonic-project-name>
选项-b触发
.pyc
文件到其输出 旧版位置(即与Python2中的相同)。
答案 7 :(得分:1)
如果使用命令行,请使用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)
import (the name of the file without the extension)