Answers:
您可以compileall在终端中使用。以下命令将递归进入子目录,并为找到的所有python文件创建pyc文件。该compileall模块是Python标准库的一部分,所以你不需要安装任何额外的使用它。这对于python2和python3完全相同。
python -m compileall .
-O标志,用于字节码(.pyo文件iso .pyc)编译。
compileall在我的site-packages文件夹上做了一个意外操作,它弄乱了所有内容
自从我上一次使用Python已经有一段时间了,但是我相信您可以使用py_compile:
import py_compile
py_compile.compile("file.py")
__pycache__/file.cpython-32.pyc,您将其作为返回值。
我发现了几种将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')看一下下面的链接:
py_compile和compileall不是py_compile.py或compileall.py。换句话说,它应该是python3 -m py_compile PYTHON_FILENAME或python3 -m compileall PYTHON_FILES_DIRECTORY。
我会用compileall。从脚本和命令行都可以很好地工作。它比已经在内部使用的py_compile更高级别的模块/工具。
compileall不包含跳过相应.pyc文件已经为最新的文件的逻辑,对吗?
compileall不跳过已经有一个了最新的文件.pyc(与Python测试2.7.11)
python -m compileall <pythonic-project-name>
这样就可以全部编译.py到.pyc包含子文件夹的项目中。
python3 -m compileall <pythonic-project-name>
这样就可以全部编译.py到__pycache__项目中包含子文件夹的文件夹中。
或从这篇文章中褐变:
您可以
.pyc使用以下命令在文件夹中强制执行与Python2中相同的文件布局:
python3 -m compileall -b <pythonic-project-name>该选项
-b触发.pyc文件输出到其旧位置(即与Python2中相同)。
如果使用命令行,则将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详细资料