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
那么一切都很好,代码可以正常运行。
答案 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
。