Python 如何从.py文件手动生成.pyc文件
出于某种原因,我不能依靠Python的“import”语句自动生成.pyc文件 有没有办法实现以下功能Python 如何从.py文件手动生成.pyc文件,python,Python,出于某种原因,我不能依靠Python的“import”语句自动生成.pyc文件 有没有办法实现以下功能 def py_to_pyc(py_filepath, pyc_filepath): ... 我上次使用Python已经有一段时间了,但我相信您可以使用: 我会用。它在脚本和命令行中都能很好地工作。它比前面提到的内部使用的模块/工具稍微高一点。您可以在终端中使用compileall。下面的命令将递归地进入子目录,并为它找到的所有python文件生成pyc文件。该模块是python标准库
def py_to_pyc(py_filepath, pyc_filepath):
...
我上次使用Python已经有一段时间了,但我相信您可以使用:
我会用。它在脚本和命令行中都能很好地工作。它比前面提到的内部使用的模块/工具稍微高一点。您可以在终端中使用
compileall
。下面的命令将递归地进入子目录,并为它找到的所有python文件生成pyc文件。该模块是python标准库的一部分,因此您不需要安装任何额外的东西来使用它。这与python2和python3的工作方式完全相同
python -m compileall .
您可以使用以下命令行编译单个文件:
python -m compileall <file_1>.py <file_n>.py
python-m compileall.py.py
我找到了几种将python脚本编译成字节码的方法
py\u编译:
python -m py_compile File1.py File2.py File3.py ...
-m
指定要编译的模块名称
或者,用于交互式编译文件
python -m py_compile -
File1.py
File2.py
File3.py
.
.
.
py\u compile.compile
:
import py_compile
py_compile.compile('YourFileName.py')
import compileall
compileall.compile_file('YourFileName.py')
py\u compile.main()
:
它一次编译几个文件
import py_compile
py_compile.main(['File1.py','File2.py','File3.py'])
列表可以根据您的意愿增长。或者,您也可以在主文件中传递文件列表,甚至在命令行参数中传递文件名
或者,如果您在main中传递['-']
,则它可以交互编译文件compileall.compile\u dir()
:
它编译所提供目录中的每个Python文件compileall.compile\u file()
:
要匹配原始问题要求(源路径和目标路径),代码应如下所示:
import py_compile
py_compile.compile(py_filepath, pyc_filepath)
如果输入代码有错误,则会引发py_compile.pycompileerError异常。在python2中,您可以使用:
它将所有.py
文件编译到包含包和模块的项目中的文件夹中
或与勃朗宁来自:
您可以在文件夹中强制执行与中相同的.pyc
文件布局
Python2通过使用:
python3-m compileall-b
选项-b
触发将.pyc
文件输出到其
遗留位置(即与Python2中相同)
有两种方法可以做到这一点
命令行
使用python程序
如果您使用的是命令行,请使用将python代码编译为python二进制代码。
例如:python-m compileall-x./*
或,
您可以使用此代码将库编译为字节码:
import compilell
导入操作系统
lib\u path=“您的lib\u路径”
build\u path=“your-dest\u path”
compileall.compile\u dir(lib\u路径,force=True,legacy=True)
def MOVETONEWLLOCATION(cu_路径):
对于os.listdir(cu_路径)中的文件:
如果os.path.isdir(os.path.join(cu_path,file)):
编译(os.path.join(cu_路径,文件))
elif file.endswith(“.pyc”):
dest=os.path.join(构建路径、cu路径、文件)
os.makedirs(os.path.dirname(dest),exist\u ok=True)
重命名(os.path.join(cu_路径,文件),dest)
moveToNewLocation(lib_路径)
查看详细文档
在文件目录中创建一个新的python文件
键入import(不带扩展名的文件名)
运行文件
打开目录,然后找到pycache文件夹
里面应该是你的.pyc文件
您可能希望包含第二个参数,该参数确定输出文件。否则,它默认为\uuuupycache\uuuu/file.cpython-32.pyc
之类的值,并将其作为返回值。这应该是可以接受的答案——至少在我需要将所有*.py编译为*.pyc:recursively:)是否可以分发包含所有使用的库的pyc文件?所以用户不必安装它们,只需运行PYC文件,我知道在java中使用JARs是可能的。Python有类似的方法吗?我还听说了一些关于Python中的元文件的内容。这个编译器也会建立一些缓存吗?如果没有,该命令是什么??因为最终用户没有对lib目录的写入权限。我想加快这里的速度。。。另外,请看一看字节码(.pyo文件iso.pyc)编译的-O
标志。反编译如何?请小心使用此命令。我不小心在我的site packages文件夹中做了一个compileall
,它把一切都搞砸了compileall
不包括跳过相应的.pyc
文件已经是最新的文件的逻辑,是吗?@KyleStrandcompileall
会跳过已经是最新的.pyc
(使用Python 2.7.11进行测试)@同名有趣。不知道我为什么会这么想。谢谢检查。一个小的更正是,您正在加载的模块名是py_compile
和compileall
而不是py_compile.py
或compileall.py
。换句话说,它应该是python3-m py_compile PYTHON\u FILENAME
或python3-m编译所有PYTHON文件目录
。
import compileall
compileall.compile_file('YourFileName.py')
import py_compile
py_compile.compile(py_filepath, pyc_filepath)
python -m compileall <pythonic-project-name>
python3 -m compileall <pythonic-project-name>