为什么要编译Python脚本?您可以直接从.py文件运行它们,它工作得很好,那么是否有性能优势或其他什么?
我还注意到我的应用程序中的一些文件被编译成.pyc,而其他文件则没有,这是为什么?
为什么要编译Python脚本?您可以直接从.py文件运行它们,它工作得很好,那么是否有性能优势或其他什么?
我还注意到我的应用程序中的一些文件被编译成.pyc,而其他文件则没有,这是为什么?
当前回答
运行编译过的python时性能有所提高。然而,当你将.py文件作为导入模块运行时,python将编译并存储它,只要.py文件没有改变,它将始终使用编译后的版本。
对于任何语言,当文件被使用时,过程看起来像这样: 1. 文件由interpeter处理。 2. 文件已编译 3.执行已编译的代码。
显然,通过使用预编译代码,你可以省去第2步,这适用于python, PHP和其他。
这里有一篇有趣的博客文章解释了它们的区别http://julipedia.blogspot.com/2004/07/compiled-vs-interpreted-languages.html 这里有一个解释Python编译过程的条目http://effbot.org/zone/python-compile.htm
其他回答
在运行编译脚本时,肯定会有性能差异。如果运行普通的.py脚本,每次运行时机器都会编译它,这需要时间。在现代机器上,这几乎不明显,但随着脚本的增长,这可能会成为一个更大的问题。
运行编译过的python时性能有所提高。然而,当你将.py文件作为导入模块运行时,python将编译并存储它,只要.py文件没有改变,它将始终使用编译后的版本。
对于任何语言,当文件被使用时,过程看起来像这样: 1. 文件由interpeter处理。 2. 文件已编译 3.执行已编译的代码。
显然,通过使用预编译代码,你可以省去第2步,这适用于python, PHP和其他。
这里有一篇有趣的博客文章解释了它们的区别http://julipedia.blogspot.com/2004/07/compiled-vs-interpreted-languages.html 这里有一个解释Python编译过程的条目http://effbot.org/zone/python-compile.htm
没有涉及到的是源到源的编译。例如,nuitka将Python代码转换为C/ c++,并将其编译为直接在CPU上运行的二进制代码,而不是在较慢的虚拟机上运行的Python字节码。
这可以显著提高速度,或者当您的环境依赖于C/ c++代码时,它可以让您使用Python。
.pyc文件是已经编译为字节码的Python。如果Python发现一个.pyc文件与你调用的.py文件同名,它会自动运行一个.pyc文件。
《Python简介》是这样描述编译后的Python文件的:
程序不会运行得更快 它是从a '读过来的。Pyc '或'。pyo ' 文件比从' .py '读取时的文件 文件;这是唯一更快的方法 关于”。Pyc ' or '。Pyo '文件是 它们装载的速度。
运行.pyc文件的优点是Python不需要在运行它之前进行编译。由于Python会在运行.py文件之前编译为字节码,因此除此之外不应该有任何性能改进。
使用编译过的.pyc文件可以得到多大的改进?这取决于脚本的功能。对于只打印“Hello World”的非常简短的脚本,编译可能占启动和运行总时间的很大比例。但是对于长时间运行的脚本,相对于总运行时间,编译脚本的成本会减少。
您在命令行中命名的脚本永远不会保存到.pyc文件中。只有由“main”脚本加载的模块才会以这种方式保存。
我们使用编译后的代码分发给无法访问源代码的用户。基本上是为了防止没有经验的程序员在没有告诉我们的情况下意外地更改某些内容或修复错误。