Ubuntu下Conda虚拟环境优先调用用户目录包的问题求助
问题描述
在Ubuntu 20.04 + Anaconda 22.9.0环境下,分别在用户目录和Conda虚拟环境openmmlab中安装了两个不同版本的PyTorch:
- 用户目录的PyTorch通过
pip安装,路径为/home/user/.local/lib/python3.8/site-packages - 虚拟环境的PyTorch通过激活环境后执行
conda install安装,路径为/home/user/Applications/anaconda3/envs/openmmlab/lib/python3.8/site-packages
激活虚拟环境后,which python和which pip均指向虚拟环境路径:
(openmmlab) user@hostname:~/Applications/anaconda3$ which python /home/user/Applications/anaconda3/envs/openmmlab/bin/python (openmmlab) user@hostname:~/Applications/anaconda3$ which pip /home/user/Applications/anaconda3/envs/openmmlab/bin/pip
但导入PyTorch时,系统仍优先加载用户目录下的版本,而非虚拟环境内的版本。
解决方法
1. 确认包加载顺序
先在激活的虚拟环境中运行Python,查看sys.path的顺序(Python会按此顺序查找包):
import sys print(sys.path)
如果/home/user/.local/lib/python3.8/site-packages出现在虚拟环境的site-packages路径之前,就会优先加载用户目录的包。
2. 调整PYTHONPATH优先级
激活虚拟环境后,将虚拟环境的site-packages路径加到PYTHONPATH最前面,强制优先加载环境内的包:
export PYTHONPATH="/home/user/Applications/anaconda3/envs/openmmlab/lib/python3.8/site-packages:$PYTHONPATH"
若要永久生效,创建虚拟环境的激活脚本文件/home/user/Applications/anaconda3/envs/openmmlab/etc/conda/activate.d/env_vars.sh,写入上述命令即可。每次激活环境时会自动执行该脚本。
3. 禁用用户目录site-packages
若需要完全隔离虚拟环境,不让Python加载用户目录的包,可在激活环境后执行:
export PYTHONNOUSERSITE=1
同样可以将此命令写入上述激活脚本,实现永久生效。退出虚拟环境后,用户目录的包会自动恢复可用。
4. 检查pip配置(可选)
如果后续需要用pip在虚拟环境内安装包,确保pip默认安装到环境目录:
pip config set global.target "/home/user/Applications/anaconda3/envs/openmmlab/lib/python3.8/site-packages"
此操作仅影响当前激活的环境,退出后会恢复原有配置。
内容的提问来源于stack exchange,提问作者ihdv
相关产品推荐
相关产品推荐

