Python 避免.pyc文件的好处?

Python 避免.pyc文件的好处?,python,Python,除了在源文件夹中没有一堆这样的文件之外,还有什么好处、性能或其他方面的好处吗?我认为没有.pyc文件是缓存的字节码文件,可以节省启动时间,因为Python不必在每次启动解释器时重新编译Python文件 最多,关闭字节码编译可以让您测量解释器在这一步上花费的时间。如果要比较节省的时间,请删除项目中的所有.pyc文件,并使用-B开关将Python计时到解释器: $ time python -B yourproject 然后在不使用-B开关的情况下再次运行: $ time python yourpr

除了在源文件夹中没有一堆这样的文件之外,还有什么好处、性能或其他方面的好处吗?

我认为没有
.pyc
文件是缓存的字节码文件,可以节省启动时间,因为Python不必在每次启动解释器时重新编译Python文件

最多,关闭字节码编译可以让您测量解释器在这一步上花费的时间。如果要比较节省的时间,请删除项目中的所有
.pyc
文件,并使用-B开关将Python计时到解释器:

$ time python -B yourproject
然后在不使用-B开关的情况下再次运行:

$ time python yourproject

可能是您想要运行程序的用户没有对源代码目录的写访问权;例如,您不希望远程用户有任何机会通过漏洞更改您的源代码的web服务器。在这种情况下,我会使用include来使用特权用户编译所有内容,而不是放弃编写
.pyc
文件
.pyc
文件是缓存的字节码文件,可以节省启动时间,因为Python不必在每次启动解释器时重新编译Python文件

最多,关闭字节码编译可以让您测量解释器在这一步上花费的时间。如果要比较节省的时间,请删除项目中的所有
.pyc
文件,并使用-B开关将Python计时到解释器:

$ time python -B yourproject
然后在不使用-B开关的情况下再次运行:

$ time python yourproject

可能是您想要运行程序的用户没有对源代码目录的写访问权;例如,您不希望远程用户有任何机会通过漏洞更改您的源代码的web服务器。在这种情况下,我会使用include来使用特权用户编译所有内容,而不是放弃编写
.pyc
文件。

可能.pyc文件会鼓励人们认为他们不需要维护/发布原始源代码。pyc文件可能无法在操作系统和Python版本之间移植。移动Python模块时,更安全的做法是将pyc文件留在后面,只需复制或发送源代码,并让宿主Python生成新的pyc文件。


顺便说一句,在Python 3.2中,.pyc文件不再进入源文件夹,而是进入
\uuu pycache\uuu
(在源文件夹中)。

有可能.pyc文件会鼓励人们认为他们不需要维护/发送原始源代码。pyc文件可能无法在操作系统和Python版本之间移植。移动Python模块时,更安全的做法是将pyc文件留在后面,只需复制或发送源代码,并让宿主Python生成新的pyc文件。


顺便说一句,在Python 3.2中,.pyc文件不再放在源文件夹中,而是放在
\uu pycache\uu
中(在源文件夹中)。

我能想到的一个原因是:在开发过程中,如果删除或重命名
.py
文件,
.pyc
文件将保留在本地副本中,并带有旧名称和旧字节码。由于您通常不会将
.pyc
文件提交到版本控制,这可能会导致错误的
导入错误
,这些错误不会在您的计算机上发生,但会在其他计算机上发生。

我可以想到的一个原因是:在开发过程中,如果删除或重命名
.py
文件,
.pyc
文件将以旧名称和旧字节码保留在本地副本中。由于您通常不会将
.pyc
文件提交到版本控制,这可能会导致在您的计算机上不会发生,但在其他计算机上会发生的错误
导入错误。

@dkson-实际上他没有,尽管我认为这是部分错误answer@dkson:不,我没有,但我的措辞很糟糕。@MartijnPieters啊,好的。我的不好。@dkson:不用担心,我感谢反馈,并相应地改进我的答案。:-)@dkson-事实上他没有,尽管我认为这是部分原因answer@dkson:不,我没有,但我的措辞很糟糕。@MartijnPieters啊,好的。我的不好。@dkson:不用担心,我感谢反馈,并相应地改进我的答案。:-)
.pyc
文件在Python版本之间确实不可移植,除非您为特定的Python版本打包,否则不应随这些文件一起发送代码。
.pyc
文件在Python版本之间确实不可移植,除非您为特定的Python版本打包,否则不应随这些文件一起发送代码。否。如果最好不要
.pyc
s,那么Python将不包括它们=)不。如果最好不要
.pyc
s,那么Python将不包括它们=)