2024-04-26 09:46:27 发布
网友
它被编译成字节码,使用起来非常快。
某些文件未编译的原因是,每次运行脚本时都会重新编译使用python main.py调用的主脚本。所有导入的脚本都将被编译并存储在磁盘上。
python main.py
通过Ben Blank:
It's worth noting that while running a compiled script has a faster startup time (as it doesn't need to be compiled), it doesn't run any faster.
pyc文件是已经编译成字节码的Python。如果Python找到与调用的.py文件同名的.pyc文件,它将自动运行该文件。
“Python简介”says关于编译的Python文件:
A program doesn't run any faster when it is read from a ‘.pyc’ or ‘.pyo’ file than when it is read from a ‘.py’ file; the only thing that's faster about ‘.pyc’ or ‘.pyo’ files is the speed with which they are loaded.
运行.pyc文件的好处是,在运行之前,Python不必产生编译它的开销。由于Python无论如何都会在运行.py文件之前编译成字节码,因此除了这一点之外,不应该有任何性能改进。
使用编译后的.pyc文件可以改进多少?这取决于脚本的作用。对于一个简单打印“Hello World”的简单脚本,编译可能占整个启动和运行时间的很大一部分。但是,对于运行时间较长的脚本,编译脚本相对于总运行时间的成本会降低。
您在命令行中命名的脚本永远不会保存到.pyc文件中。只有由“main”脚本加载的模块才会以这种方式保存。
优点:
第一种:轻微的,可克服的混淆。
第二:如果编译的结果是一个非常小的文件,那么您将获得更快的加载时间。对网络很好。
第三:Python可以跳过编译步骤。初载时更快。很适合CPU和网络。
第四:注释越多,.pyc或.pyo文件与源文件相比就越小。
.pyc
.pyo
第五:只有一个.pyc或.pyo文件的最终用户不太可能向您显示一个错误,该错误是由他们忘记告诉您的未还原的更改引起的。
第六:如果你瞄准的是嵌入式系统 要嵌入的文件可能代表一个重要的优点,而且体系结构是稳定的,因此下面详细介绍的缺点之一不会起作用。
顶级编译
知道您可以这样将顶级python源文件编译成.pyc文件是很有用的:
python -m py_compile myscript.py
这将删除注释。它使docstrings保持完整。如果您也希望摆脱docstrings(您可能需要认真考虑为什么要这样做),那么请用这种方式编译。。。
docstrings
python -OO -m py_compile myscript.py
…您将得到一个.pyo文件,而不是一个.pyc文件;就代码的基本功能而言,它同样可以分发,但比剥离出来的docstrings的大小要小(而且,如果它首先有像样的docstrings就不太容易理解,以便以后使用)。但见下面的第三个缺点。
请注意,python使用.py文件的日期(如果存在的话)来决定它是否应该执行.py文件,而不是.pyc或.pyo文件——所以编辑您的.py文件,并且.pyc或.pyo已经过时,您获得的任何好处都将丢失。您需要重新编译它,以便再次获得.pyc或.pyo好处,如它们可能是。
.py
缺点:
第一:在.pyc和.pyo文件中有一个“magic cookie”,表示编译python文件的系统架构。如果将这些文件中的一个分发到不同类型的环境中,它将中断。如果您分发.pyc或.pyo而没有相关的.py来重新编译或touch,因此它将取代.pyc或.pyo,则最终用户也无法修复它。
touch
第二:如果使用如上所述的-OO命令行选项跳过docstrings,则任何人都无法获取该信息,这会使代码的使用更加困难(或不可能)
-OO
第三:Python的-OO选项还根据-O命令行选项实现了一些优化;这可能会导致操作的更改。已知的优化是:
-O
sys.flags.optimize
assert
__debug__
第四:如果您故意让python脚本在第一行以#!/usr/bin/python的顺序执行,那么这将在.pyc和.pyo文件中被删除,并且该功能将丢失。
#!/usr/bin/python
第五:有点明显,但是如果你编译你的代码,不仅它的使用会受到影响,而且其他人从你的工作中学到东西的可能性也会降低,通常是严重的。
它被编译成字节码,使用起来非常快。
某些文件未编译的原因是,每次运行脚本时都会重新编译使用
python main.py
调用的主脚本。所有导入的脚本都将被编译并存储在磁盘上。通过Ben Blank:
pyc文件是已经编译成字节码的Python。如果Python找到与调用的.py文件同名的.pyc文件,它将自动运行该文件。
“Python简介”says关于编译的Python文件:
运行.pyc文件的好处是,在运行之前,Python不必产生编译它的开销。由于Python无论如何都会在运行.py文件之前编译成字节码,因此除了这一点之外,不应该有任何性能改进。
使用编译后的.pyc文件可以改进多少?这取决于脚本的作用。对于一个简单打印“Hello World”的简单脚本,编译可能占整个启动和运行时间的很大一部分。但是,对于运行时间较长的脚本,编译脚本相对于总运行时间的成本会降低。
您在命令行中命名的脚本永远不会保存到.pyc文件中。只有由“main”脚本加载的模块才会以这种方式保存。
优点:
第一种:轻微的,可克服的混淆。
第二:如果编译的结果是一个非常小的文件,那么您将获得更快的加载时间。对网络很好。
第三:Python可以跳过编译步骤。初载时更快。很适合CPU和网络。
第四:注释越多,
.pyc
或.pyo
文件与源文件相比就越小。第五:只有一个
.pyc
或.pyo
文件的最终用户不太可能向您显示一个错误,该错误是由他们忘记告诉您的未还原的更改引起的。第六:如果你瞄准的是嵌入式系统 要嵌入的文件可能代表一个重要的优点,而且体系结构是稳定的,因此下面详细介绍的缺点之一不会起作用。
顶级编译
知道您可以这样将顶级python源文件编译成
.pyc
文件是很有用的:这将删除注释。它使
docstrings
保持完整。如果您也希望摆脱docstrings
(您可能需要认真考虑为什么要这样做),那么请用这种方式编译。。。…您将得到一个
.pyo
文件,而不是一个.pyc
文件;就代码的基本功能而言,它同样可以分发,但比剥离出来的docstrings
的大小要小(而且,如果它首先有像样的docstrings
就不太容易理解,以便以后使用)。但见下面的第三个缺点。请注意,python使用
.py
文件的日期(如果存在的话)来决定它是否应该执行.py
文件,而不是.pyc
或.pyo
文件——所以编辑您的.py文件,并且.pyc
或.pyo
已经过时,您获得的任何好处都将丢失。您需要重新编译它,以便再次获得.pyc
或.pyo
好处,如它们可能是。缺点:
第一:在
.pyc
和.pyo
文件中有一个“magic cookie”,表示编译python文件的系统架构。如果将这些文件中的一个分发到不同类型的环境中,它将中断。如果您分发.pyc
或.pyo
而没有相关的.py
来重新编译或touch
,因此它将取代.pyc
或.pyo
,则最终用户也无法修复它。第二:如果使用如上所述的
-OO
命令行选项跳过docstrings
,则任何人都无法获取该信息,这会使代码的使用更加困难(或不可能)第三:Python的
-OO
选项还根据-O
命令行选项实现了一些优化;这可能会导致操作的更改。已知的优化是:sys.flags.optimize
=1assert
语句被跳过__debug__
=错误第四:如果您故意让python脚本在第一行以
#!/usr/bin/python
的顺序执行,那么这将在.pyc
和.pyo
文件中被删除,并且该功能将丢失。第五:有点明显,但是如果你编译你的代码,不仅它的使用会受到影响,而且其他人从你的工作中学到东西的可能性也会降低,通常是严重的。
相关问题 更多 >
编程相关推荐