Python多版本共存跨版本导入模块的PYTHONPATH永久配置方法
永久修复方案
根因说明
你当前在全局PYTHONPATH中同时配置了Python2.7和Python3.5的版本专属第三方包路径,两个版本的解释器启动时都会加载完整的PYTHONPATH,路径靠前的包目录会被优先搜索,必然会出现单版本路径调整后另一个版本导入异常的问题。
正常情况下Python解释器启动时会自动将对应版本的dist-packages/site-packages路径加入搜索路径,不需要手动写到全局PYTHONPATH中,你的配置属于多余配置引发的冲突。
最优修复方案(推荐)
- 找到
PYTHONPATH的配置位置,通常是~/.bashrc、~/.bash_profile、/etc/profile这类shell全局/用户配置文件 - 编辑配置文件,删除
PYTHONPATH变量中的两个版本专属路径:/usr/local/lib/python2.7/dist-packages、/usr/local/lib/python3.5/dist-packages,仅保留通用路径即可,修改后示例如下:
export PYTHONPATH="/usr/lib/python3/dist-packages"
- 执行
source 你修改的配置文件路径(比如source ~/.bashrc)使配置生效 - 两个版本的Python启动时会自动加载各自的专属包路径,不会再出现跨版本搜索包的问题
备选方案(适用于必须保留全局多版本路径的场景)
如果你的业务场景必须在全局PYTHONPATH中保留两个版本的路径,可以通过配置版本别名隔离路径:
- 在shell配置文件中添加如下两条别名配置:
alias python2='PYTHONPATH=/usr/local/lib/python2.7/dist-packages:/usr/lib/python3/dist-packages python2.7' alias python3='PYTHONPATH=/usr/lib/python3/dist-packages:/usr/local/lib/python3.5/dist-packages python3.5'
- 执行
source ~/.bashrc生效后,日常使用python2、python3命令启动对应版本即可,两个版本的搜索路径完全隔离不会冲突
验证步骤
- 启动Python3执行以下命令,确认导入pandas无报错:
import sys # 确认3.5的包路径排在2.7的包路径前面 print([p for p in sys.path if 'dist-packages' in p]) import pandas print(pandas.__version__)
- 启动Python2执行
import pandas,确认无报错即可
内容的提问来源于stack exchange,提问作者user5959854
相关产品推荐
相关产品推荐

