使用python3 virtualenv创建虚拟环境总自带ROS依赖,是什么原因导致的?
问题原因
- ROS安装完成后会默认在shell配置文件(如
~/.bashrc、~/.zshrc)中添加source /opt/ros/<对应ROS版本>/setup.bash配置,每次打开终端时该命令会自动执行,将ROS自带的Python包路径写入PYTHONPATH环境变量 - 创建、激活Python虚拟环境时默认会继承父shell的所有环境变量,其中就包括已配置的ROS包路径。Python执行包查找、pip枚举已安装包时都会扫描
PYTHONPATH下的路径,因此会显示虚拟环境中存在ROS相关依赖 - 若你创建虚拟环境时显式添加了
--system-site-packages参数,虚拟环境会直接继承系统全局安装的所有Python包,也会包含ROS的相关依赖
解决方法
不需要在虚拟环境中使用ROS依赖的场景
- 创建虚拟环境前临时清空
PYTHONPATH变量即可,执行命令:PYTHONPATH= virtualenv <你的虚拟环境名称> - 若平时使用ROS的频率较低,可直接注释掉shell配置文件中ROS的source命令,需要使用ROS时再手动执行对应source命令即可
- 创建虚拟环境时显式添加
--no-site-packages参数,禁止继承系统全局的Python包:virtualenv --no-site-packages <你的虚拟环境名称>
需要在虚拟环境中同时使用ROS和其他Python依赖的场景
- 激活虚拟环境后手动调整
PYTHONPATH的优先级,将虚拟环境自身的site-packages路径放在PYTHONPATH的最前端即可
内容的提问来源于stack exchange,提问作者Devesh Datwani
相关产品推荐
相关产品推荐

