为什么要编译Python代码?

为什么要编译Python代码?,python,compilation,Python,Compilation,为什么要编译Python脚本?您可以直接从.py文件运行它们,它工作正常,那么是否有性能优势 我还注意到,我的应用程序中的一些文件被编译成.pyc,而其他文件则没有,这是为什么?运行编译后的脚本时,性能肯定会有所不同。如果运行正常的.py脚本,则机器会在每次运行时编译它,这需要时间。在现代机器上,这几乎不明显,但随着脚本的增长,这可能会成为一个更大的问题。运行编译后的python会提高性能。但是,当您将.py文件作为导入的模块运行时,python将编译并存储它,只要.py文件没有更改,它将始终使

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


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

运行编译后的脚本时,性能肯定会有所不同。如果运行正常的
.py
脚本,则机器会在每次运行时编译它,这需要时间。在现代机器上,这几乎不明显,但随着脚本的增长,这可能会成为一个更大的问题。

运行编译后的python会提高性能。但是,当您将.py文件作为导入的模块运行时,python将编译并存储它,只要.py文件没有更改,它将始终使用编译后的版本

当使用文件时,使用任何Interpect语言时,过程如下所示:
1.文件由interpeter处理。
2.文件已编译
3.编译后的代码被执行。

显然,通过使用预编译代码,您可以消除步骤2,这适用于python、PHP和其他

这里有一篇有趣的博客文章解释了这些差异

这里有一个条目解释了Python编译过程

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


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

它被编译成字节码,可以使用得更快、更快

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

重要补充:


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


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

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


您可以在中了解更多信息。

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

“Python简介”介绍编译的Python文件:

程序在以下情况下不会运行得更快: 它是从“.pyc”或“.pyo”读取的 从“.py”中读取文件时的值 文件唯一更快的东西 关于“.pyc”或“.pyo”文件是 加载它们的速度

运行.pyc文件的优点是Python在运行它之前不必产生编译它的开销。因为Python在运行.py文件之前会编译成字节码,所以除了这一点之外,不应该有任何性能改进

使用编译后的.pyc文件可以提高多少?这取决于脚本的功能。对于只打印“Hello World”的非常简短的脚本,编译可能占总启动和运行时间的很大一部分。但是,对于运行时间较长的脚本,相对于总运行时间而言,编译脚本的成本会降低


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

初学者认为Python是由于.pyc文件而编译的。pyc文件是编译后的字节码,然后对其进行解释。因此,如果您以前运行过Python代码,并且手头有.pyc文件,那么第二次运行时它会更快,因为它不必重新编译字节码

编译器: 编译器是将高级语言翻译成机器语言的一段代码

口译员: 解释器还将高级语言转换为机器可读的二进制等价物。每次解释器获得要执行的高级语言代码时,它都会将代码转换为中间代码,然后再转换为机器代码。对代码的每一部分进行解释,然后按顺序分别执行,如果在代码的某一部分中发现错误,将停止对代码的解释,而不翻译下一组代码

来源:
加上:

第一:温和的、可克服的混淆

第二:如果编译的结果是一个小得多的文件,您将获得更快的加载时间。很适合网络

第三:Python可以跳过编译步骤。初始负载时速度更快。这对CPU和网络来说都很好

第四:评论越多,与源
.py
文件相比,
.pyc
.pyo
文件越小

第五:只有
.pyc
.pyo
文件在手的最终用户不太可能向您展示他们忘记告诉您的未还原更改导致的错误

第六:如果你的目标是一个嵌入式系统,获得更小的尺寸 要嵌入的文件可能是一个显著的优点,而且体系结构是稳定的,所以下面详述的缺点之一不会发挥作用

顶级编译

您可以通过以下方式将顶级python源文件编译成
.pyc
文件,这一点非常有用:

python -m py_compile myscript.py
这将删除注释。它使
docstrings
保持不变。如果您还想摆脱
docstrings
(您可能需要认真思考为什么要这样做)
python -OO -m py_compile myscript.py