升级Python后需重新安装模块吗?旧版本模块如何复用?
解决Python升级后旧版本模块无法导入的问题
这个问题我之前升级Python时也碰到过!本质原因是每个Python版本都有独立的site-packages目录——这个目录是用来存放你安装的第三方模块的,3.5的模块都存在3.5专属的site-packages里,3.6自然找不到它们,所以会抛出ModuleNotFoundError。
下面给你两种解决思路,优先推荐第一种:
一、重新安装模块(最稳妥的方案)
这是官方推荐的做法,因为有些模块可能和Python版本有兼容性要求,重新安装能确保模块适配3.6版本。
单个模块安装:直接用3.6版本的
pip来安装,比如你提到的PIL(现在官方包叫pillow),执行命令:python3.6 -m pip install pillow注意要明确用
python3.6来调用pip,避免和系统里的其他Python版本混淆。批量安装所有旧模块:如果3.5里装了很多模块,不想一个个装,可以先导出3.5的模块列表,再批量导入到3.6:
- 先在3.5环境下导出已安装模块:
python3.5 -m pip freeze > requirements.txt - 然后切换到3.6环境,安装列表里的所有模块:
python3.6 -m pip install -r requirements.txt
- 先在3.5环境下导出已安装模块:
二、临时应急:手动添加旧版本的site-packages路径(不推荐长期使用)
如果只是临时需要用某个旧模块,不想重新安装,可以手动把3.5的site-packages路径添加到3.6的Python搜索路径里,但这个方法有兼容性风险,只适合短期测试:
先找到3.5的
site-packages路径:- Windows系统一般是:
C:\Python35\Lib\site-packages - Linux/macOS系统一般是:
/usr/local/lib/python3.5/site-packages(具体路径可能因安装方式不同略有差异)
- Windows系统一般是:
在3.6的Python环境中添加路径:
import sys # 替换成你找到的3.5 site-packages路径 sys.path.append("/usr/local/lib/python3.5/site-packages") # 现在就可以导入PIL了 import PIL
注意:这个方法不推荐长期使用,因为不同Python版本的模块可能存在依赖冲突,而且如果之后卸载了3.5,这个路径就会失效,还可能导致一些难以排查的兼容性问题。
总结一下:优先选择重新安装模块,这是最安全可靠的方式,能保证模块和3.6版本完全兼容;临时添加路径只适合应急场景。
内容的提问来源于stack exchange,提问作者braasch
相关产品推荐
相关产品推荐

