为什么要编译Python脚本?您可以直接从.py文件运行它们,它工作得很好,那么是否有性能优势或其他什么?

我还注意到我的应用程序中的一些文件被编译成.pyc,而其他文件则没有,这是为什么?


当前回答

是的,性能是主要原因,据我所知,也是唯一的原因。

如果您的一些文件没有被编译,可能是因为目录权限或其他原因,Python无法写入.pyc文件。或者可能未编译的文件从来没有被加载……(脚本/模块只有在第一次加载时才会被编译)

其他回答

.pyc文件是已经编译为字节码的Python。如果Python发现一个.pyc文件与你调用的.py文件同名,它会自动运行一个.pyc文件。

《Python简介》是这样描述编译后的Python文件的:

程序不会运行得更快 它是从a '读过来的。Pyc '或'。pyo ' 文件比从' .py '读取时的文件 文件;这是唯一更快的方法 关于”。Pyc ' or '。Pyo '文件是 它们装载的速度。

运行.pyc文件的优点是Python不需要在运行它之前进行编译。由于Python会在运行.py文件之前编译为字节码,因此除此之外不应该有任何性能改进。

使用编译过的.pyc文件可以得到多大的改进?这取决于脚本的功能。对于只打印“Hello World”的非常简短的脚本,编译可能占启动和运行总时间的很大比例。但是对于长时间运行的脚本,相对于总运行时间,编译脚本的成本会减少。

您在命令行中命名的脚本永远不会保存到.pyc文件中。只有由“main”脚本加载的模块才会以这种方式保存。

如前所述,将python代码编译为字节码可以提高性能。这通常由python本身处理,仅用于导入脚本。

编译python代码的另一个原因可能是为了保护你的知识产权不被复制和/或修改。

你可以在Python文档中阅读更多相关内容。

它被编译成字节码,使用起来非常非常快。

有些文件没有被编译的原因是,每次运行脚本时,你用python main.py调用的主脚本都会被重新编译。所有导入的脚本都将被编译并存储在磁盘上。

Ben Blank补充的重要内容:

值得注意的是,在运行 编译脚本启动速度更快 时间(因为它不需要时间 编译后),它不运行任何文件 得更快。

没有涉及到的是源到源的编译。例如,nuitka将Python代码转换为C/ c++,并将其编译为直接在CPU上运行的二进制代码,而不是在较慢的虚拟机上运行的Python字节码。

这可以显著提高速度,或者当您的环境依赖于C/ c++代码时,它可以让您使用Python。

是的,性能是主要原因,据我所知,也是唯一的原因。

如果您的一些文件没有被编译,可能是因为目录权限或其他原因,Python无法写入.pyc文件。或者可能未编译的文件从来没有被加载……(脚本/模块只有在第一次加载时才会被编译)