Ubuntu20.04创建Python venv预装大量冗余包如何解决
问题原因
你使用的Ubuntu 20.04系统安装了ROS Noetic,ROS安装过程中会自动将自身的Python包路径写入全局PYTHONPATH环境变量。默认创建的Python venv会继承当前shell的环境变量,即便venv开启了系统包隔离,PYTHONPATH下的路径优先级仍高于虚拟环境自身的包路径,因此执行pip list时会看到大量ROS相关包——这些包并未实际写入你的虚拟环境目录,只是环境变量继承导致的可见假象。
解决方法
要获得仅包含pip、wheel、setuptools三个基础包的干净虚拟环境,按以下步骤操作即可:
- 创建虚拟环境时明确指定隔离系统包(新版venv默认已开启,手动指定可避免环境默认配置异常):
python3 -m venv --no-site-packages my_venv - 激活虚拟环境前先清空当前shell的
PYTHONPATH变量,避免ROS路径被继承:# 临时清空PYTHONPATH export PYTHONPATH="" # 激活虚拟环境 source my_venv/bin/activate - (可选)如果需要永久避免该问题,可修改虚拟环境的激活脚本,自动处理
PYTHONPATH:- 编辑
my_venv/bin/activate文件,在文件末尾添加如下内容,实现激活虚拟环境时自动备份并清空PYTHONPATH:
export OLD_PYTHONPATH="$PYTHONPATH" export PYTHONPATH=""- 找到
deactivate函数的定义,在函数内部合适位置添加如下内容,实现退出虚拟环境时自动恢复原有PYTHONPATH:
export PYTHONPATH="$OLD_PYTHONPATH" unset OLD_PYTHONPATH - 编辑
操作完成后执行pip list验证,就能看到仅保留了三个基础依赖包的干净环境。
内容的提问来源于stack exchange,提问作者MikaYeghi
相关产品推荐
相关产品推荐

