升级pip后pip3因ImportError无法运行,无sudo权限如何修复?
解决macOS High Sierra下pip3升级后
ImportError: cannot import name 'main'的问题 我之前也碰到过一模一样的情况!在macOS High Sierra上用Python3.6,升级pip后直接炸了,还是无sudo权限的场景,太头疼了。先给你理清楚问题根源,再说说该检查什么,还有可行的解决办法:
问题根源
你用--user参数升级pip后,新版pip的内部结构发生了变化,但系统自带的/usr/bin/pip3脚本还在沿用旧的导入逻辑(from pip import main),新旧版本的pip在这里产生冲突,就导致了导入错误。
先检查这几个关键点
- 查看当前调用的pip3路径:运行
which pip3,如果输出是/usr/bin/pip3,说明你仍在使用系统自带的旧脚本,而非你通过--user安装的新版pip - 查看实际生效的pip版本:别用
pip3 --version,改用python3 -m pip --version,这个命令会绕开系统脚本,直接调用Python模块内的pip,能看到你用户目录下安装的pip真实版本 - 检查PATH优先级:运行
echo $PATH,看看~/Library/Python/3.6/bin(这是--user安装pip的默认路径)是否排在/usr/bin前面。如果不是,系统会优先调用系统的旧脚本,引发冲突
解决办法
方法一:回退到兼容的pip版本(你已经找到的有效方案)
直接用Python模块方式安装旧版本pip,完全不需要sudo权限:
python3 -m pip install --user pip==9.0.1
这个版本和系统的/usr/bin/pip3脚本兼容,安装完成后再运行pip3 install就能恢复正常。
方法二:改用模块方式调用pip(无需回退版本)
如果不想用旧版pip,以后可以不再直接用pip3 install,换成以下格式:
python3 -m pip install [你的包名]
这种方式直接调用Python自带的pip模块,完全避开系统旧脚本的问题,新版pip也能正常使用。
方法三:调整PATH让用户版pip优先
编辑你的shell配置文件(用bash的话是~/.bash_profile,用zsh则是~/.zshrc),添加一行:
export PATH=~/Library/Python/3.6/bin:$PATH
保存后重启终端,系统就会优先调用你用户目录下的新版pip脚本,以后直接用pip3命令也没问题了。
内容的提问来源于stack exchange,提问作者Insu Q
相关产品推荐
相关产品推荐

