Python **在**主要版本中升级时是否需要删除 pyc 文件?
Is it necessary to delete pyc files when upgrading Python **within** a major release?
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文件并安装一个Python或另一个version时,设置一个虚拟环境
~/venv-362
~/venv-364
~/venv-366
~/venv-370
那么一切正常,代码运行正常。
.pyc
机器被设计成对用户完全透明。特别是,根据 Are Python 2.5 .pyc files compatible with Python 2.6 .pyc files?,.pyc
包含用于编译它的 Python 版本。
因此,尽管您可以清理旧文件,这样您就不会拥有无论如何都不会使用的过时数据,但无论如何它们都不应该影响执行。
特别是,它们不应导致任何导入错误。 .
这并不意味着您在更新时不应该重新生成它们——根据python bytecode compatibility , Python makes no guarantees about bytecode compatibility between releases, even micro releases. Normally, they will be regenerated on demand, but if you don't have write access to the corresponding dir, you should do that during installation, or afterwards with e.g. compileall
。
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文件并安装一个Python或另一个version时,设置一个虚拟环境
~/venv-362
~/venv-364
~/venv-366
~/venv-370
那么一切正常,代码运行正常。
.pyc
机器被设计成对用户完全透明。特别是,根据 Are Python 2.5 .pyc files compatible with Python 2.6 .pyc files?,.pyc
包含用于编译它的 Python 版本。
因此,尽管您可以清理旧文件,这样您就不会拥有无论如何都不会使用的过时数据,但无论如何它们都不应该影响执行。
特别是,它们不应导致任何导入错误。
这并不意味着您在更新时不应该重新生成它们——根据python bytecode compatibility , Python makes no guarantees about bytecode compatibility between releases, even micro releases. Normally, they will be regenerated on demand, but if you don't have write access to the corresponding dir, you should do that during installation, or afterwards with e.g. compileall
。