Ubuntu20.04下venv虚拟环境pip list无法显示环境内包求助
解决Ubuntu 20.04中Python venv显示全局包的问题
可能的原因
ROS Noetic会修改PYTHONPATH环境变量,将系统级ROS包路径加入其中,导致虚拟环境的Python解释器优先加载全局包;另外可能是创建虚拟环境时未明确指定正确的Python版本,或者终端中残留了ROS的环境配置。
解决步骤
1. 检查虚拟环境的Python/Pip路径是否正确
激活虚拟环境后,执行以下命令确认路径:
which python which pip
输出应指向dummyname/bin/python和dummyname/bin/pip。如果不是,说明虚拟环境激活未生效,或python命令被别名/系统环境覆盖。此时可以直接使用绝对路径运行虚拟环境的Python:
/path/to/dummyname/bin/python -m pip list
2. 清除ROS的PYTHONPATH影响
激活虚拟环境后,重置PYTHONPATH,让虚拟环境仅使用自身的包路径:
export PYTHONPATH=""
之后再执行pip list,就能看到虚拟环境内的独立包列表(仅pip、setuptools等默认包)。
如果希望每次激活虚拟环境时自动重置PYTHONPATH,可以修改虚拟环境的激活脚本:
- 打开
dummyname/bin/activate文件 - 在文件末尾添加一行:
export PYTHONPATH=""
3. 在无ROS环境的终端中创建虚拟环境
如果上述方法无效,尝试新开一个未加载ROS环境的终端:
- 注释掉
~/.bashrc中类似source /opt/ros/noetic/setup.bash的行 - 重启终端,然后重新创建虚拟环境:
python3 -m venv dummyname source dummyname/bin/activate pip list
创建完成后,再恢复~/.bashrc中的ROS配置即可。
4. 重新初始化虚拟环境的pip
如果虚拟环境的pip被全局pip污染,可重新安装pip:
激活虚拟环境后执行:
curl https://bootstrap.pypa.io/get-pip.py | python
之后再运行pip list即可正常显示虚拟环境内的包。
内容的提问来源于stack exchange,提问作者codeFighter2022
相关产品推荐
相关产品推荐

