pipenv创建虚拟环境后pip提示无法导入appdirs如何修复
问题根源
错误由两个原因叠加导致:
- 系统全局路径下的
/usr/lib/python3/dist-packages/pip组件损坏,缺失appdirs依赖 - 要么是当前环境的PYTHONPATH包含系统python包路径,要么是PATH优先级异常,导致虚拟环境调用了系统损坏的pip,而非虚拟环境自带的正常pip
修复步骤
步骤1:临时绕过损坏的系统pip,恢复当前虚拟环境pip使用
进入项目目录激活虚拟环境后,直接调用虚拟环境内的python执行pip,验证是否正常:
/home/me/.local/share/virtualenvs/PRJ-KNzNuNcm/bin/python -m pip --version
如果输出正常(显示pip 21.1.2,对应虚拟环境的Python 3.9.7),说明虚拟环境本身没有问题,你可以在当前shell会话中执行别名配置,直接正常使用pip命令:
alias pip="/home/me/.local/share/virtualenvs/PRJ-KNzNuNcm/bin/python -m pip" alias pip3="/home/me/.local/share/virtualenvs/PRJ-KNzNuNcm/bin/python -m pip"
如果执行上述命令仍然报错,检查PYTHONPATH是否包含系统包路径:
echo $PYTHONPATH
如果输出包含/usr/lib/python3/dist-packages,执行以下命令临时移除即可解决:
unset PYTHONPATH
步骤2:修复系统层面pip问题,一劳永逸解决所有场景的报错
首先卸载系统自带的损坏pip组件:
sudo apt remove python3-pip -y
注意:卸载系统python3-pip仅移除系统自带的损坏pip,不会影响linuxbrew安装的Python环境。
之后用linuxbrew自带的Python重装pip:
/home/linuxbrew/.linuxbrew/bin/python3.9 -m ensurepip --upgrade
安装完成后执行pip --version,确认输出对应linuxbrew的Python路径而非/usr下的路径即可。
步骤3:可选,调整pipenv创建虚拟环境的默认逻辑
后续创建新的pipenv虚拟环境时,可指定直接使用linuxbrew的Python,避免关联系统损坏组件:
pipenv install --python /home/linuxbrew/.linuxbrew/bin/python3.9 --skip-lock
内容的提问来源于stack exchange,提问作者R. Y
相关产品推荐
相关产品推荐

