在主要版本内**升级Python时,是否有必要删除pyc文件?

时间:2018-06-30 23:31:05

标签: python python-venv pyc

TL; DR

如果您在采用3.7.0之前在3.6.6和3.7.0之间来回切换,则无需担心,两组pyc文件将共存并且可以。

如果在3.6.4和3.6.6之间来回切换怎么办?您需要删除pyc文件吗?

长版

我看到pyc文件仅适用于主要版本。例如,我有:

__init__.cpython-36.pyc
__init__.cpython-37.pyc

大概是PEP 3147的结果。

所以很清楚。如果在开发期间(例如3.6.6和3.7.0)在虚拟环境之间来回移动,则无需担心。这两个版本将同居__pycache__目录中,因为它们由主版本号标识。

问题如何在3.6.4和3.6.6之间来回切换,从一个版本切换到另一个版本时,确实需要删除pyc文件吗?在同一主要版本中?

问题动机

我需要切换虚拟环境的原因是,我认为我的代码可以在某些版本的Python 3上正常运行,而在其他版本上却不能。我有很多

ImportError: No module named XYZ

错误。

但是当我清除所有pyc文件并安装一个version的Python或另一个Python时,请设置一个虚拟环境

~/venv-362
~/venv-364
~/venv-366
~/venv-370

那么一切都很好,代码可以正常运行。

1 个答案:

答案 0 :(得分:1)

.pyc机制旨在对用户完全透明。特别是,根据Are Python 2.5 .pyc files compatible with Python 2.6 .pyc files?.pyc包含用于对其进行编译的Python版本。

因此,尽管您可以清理旧文件,以使它们不会有过时的旧数据,但它们绝不影响执行。

尤其是它们不应引起任何导入错误。 You must be having a problem with your import path instead


这并不意味着您不应该在更新时重新生成-根据python bytecode compatibility,Python不保证版本even micro releases之间的字节码兼容性。通常,它们将按需重新生成,但是如果您没有对相应目录的写访问权,则应在安装过程中执行此操作,或者在安装后执行此操作。 compileall