编译Python脚本以加快加载速度
我觉得我真的很笨。我知道我可以使用编译Python脚本以加快加载速度,python,python-3.x,compilation,Python,Python 3.x,Compilation,我觉得我真的很笨。我知道我可以使用python-mcileall将.py文件编译成.pyc,因为脚本是预编译的,所以加载速度会更快,但如果它是主脚本,这似乎不是一个可用的功能。为了解释我的意思,假设我从命令行运行test.py,如下所示: python test.py 现在让我们假设test.py是一个大文件,需要花费一些时间才能转换为字节码,逻辑上要做的是预编译它,因此我在命令中运行以下命令: python -m compileall test.py 然后,我使用以下命令再次运行脚本: p
python-mcileall
将.py文件编译成.pyc,因为脚本是预编译的,所以加载速度会更快,但如果它是主脚本,这似乎不是一个可用的功能。为了解释我的意思,假设我从命令行运行test.py,如下所示:
python test.py
现在让我们假设test.py是一个大文件,需要花费一些时间才能转换为字节码,逻辑上要做的是预编译它,因此我在命令中运行以下命令:
python -m compileall test.py
然后,我使用以下命令再次运行脚本:
python test.py
如果我理解正确,test.py文件将重新编译,基本上使预编译变得毫无意义。我弄错了吗?如果我没有,有办法解决这个问题吗?预编译在
/\uuuu pycache\uuuu
中生成一个.pyc
文件。通过运行以下命令,您可以获得它:
$python3-m compileall py.py
正在编译“py.py”。。。
$ls\uu pycache__
py.cpython-38.pyc
$#它存在
为了测试运行脚本是否会重新编译所有内容,我将其删除
$rm-fr\uu pycache__
$python3 py.py
地狱世界
$ls\uu pycache__
ls:_pycache _;:没有这样的文件或目录
正如您所看到的,脚本不是由pythonscript.py重新编译的(它只是执行它),这与python-mcileallscript.py
不同
如果我理解正确,test.py文件将重新编译,基本上使预编译变得毫无意义
所以这并不是毫无意义的。我相信这条线索可能会回答你的问题:@RubenBrekelmans我读过这条线索。它涉及到这个问题,但不清楚(至少对我来说不清楚)。尽管有重复另一个线程的风险,但我的理解是,在运行单个文件而不进行额外导入的情况下,编译不会产生任何影响。如果要在test.py中导入模块,编译将影响这些导入,但不会影响test.py本身。为什么要重新编译test.py,恐怕我不知道。谢谢!但这给我留下了一个问题,python是否检查编译后的文件,并在它存在时使用它?如果在运行文件之前没有删除编译版本,是否会使用编译版本?在运行python path/to/projectDir
或导入模块(单个文件可以)时,它将使用pyc。但是当运行单个文件时,比如python path/to/projectDir/uuu main\uuuuu.py
,它不会运行@用户6916458