Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译Python脚本以加快加载速度_Python_Python 3.x_Compilation - Fatal编程技术网

编译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