在 macOS 上只要使用 pip 就报错?pip 无端报错详细解决方案
今天随便折腾了一下终端,准备安装 Powerline 的时候发现……
pip install powerline
竟然报错 SyntaxError: invalid syntax
?
是的,pip
突然就用不了了!
错误重现
大概就是这么随便地来了一下 pip
:
原因探索
信息收集
本来想用 pip --version
看一下出错的 pip
的具体版本的,结果……只要执行 pip
都会报错:
还好有个窍门,在终端里面输入 pip
并按 TAB
键,就可以列出所有开头为 pip
的命令名称。
然后我们就可以尝试执行所有列出的命令,得到的结果就是 pip
、pip2
、pip2.7
都会报错。
那就可以肯定,报错的 pip
是基于 Python 2
的了。
基本尝试
不管他到底为什么报错,重装大法永远要最先试一下。
卸载 pip
卸载 pip
一般使用:
pip uninstall pip
然而我似乎好像大概可能忘了 pip
完全没法用。
但是大佬(?)总会有另一种方法:
python -m pip uninstall pip
也就是使用 python
间接调用 pip
模块。
居然成功了!
再把 pip
装回去
easy_install pip
成功翻车。
那……再试一下 PyPA 提供的脚本 get-pip.py
?
python <(curl -s https://bootstrap.pypa.io/pip/2.7/get-pip.py)
(忘记截图了)
照样翻车。
这下问题大了。
逐步解决
这样的话肯定就能确定是 Python 的问题了。
校验 Python 环境
先确定一下 Python 路径:
which python
输出:
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
(好家伙,用的还是系统自带的 Python)
然后 cd
到这一整个 Python 环境的根目录:
cd '/Library/Frameworks/Python.framework/Versions/2.7/'
先给所有文件打个包:
tar -czf python2.7.tar.gz *
然后搜索一下 SHA256(你要用 SHA1 或者 MD5 也可以):
sha256sum python2.7.tar.gz
全部完成以后就像这样:
在另外一台电脑上也全部进行一次:
果然,SHA256 的值不一样。
虽然我也不确定会不会是系统在目录内某个位置创建了其他的文件,或者在这里存储了日志,才导致压缩包的校验值发生变化。但是接下来的步骤可以证明我的猜测(Python 损坏了)是正确的。
替换 Python 环境文件
一删二挪三解压。
重新安装 pip
因为我们迁移过来的 Python 环境文件里面已经包含了 pip
,所以最好是卸载后再重装一遍 pip
以适应本地环境。
python -m pip uninstall pip
easy_install pip
???为什么还是翻车了……
没事,再试一下 get-pip.py
:
python <(curl -s https://bootstrap.pypa.io/pip/2.7/get-pip.py)
很好,成功了。
完工验收
pip --version
再检查一下更新:
pip install --upgrade pip
get-pip.py
已经为我们安装了最新版。
事后总结
整个错误差不多就处理完毕了,清理一下各种临时文件,就可以继续折腾了(首尾呼应 :doge:)。
处理的过程中有这么几个比较重要的地方:
- 当
pip
无论怎么执行都出错的时候,记得使用python -m pip
; easy_install
安装pip
的方法似乎很不靠谱,在 Linux 上的表现也不是很好;- 更多的安装
pip
的方法可以参阅 Installation - pip documentation v21.1.1
总之,如果你想像我一样在 macOS 里折腾,一定要先做好时间机器的备份,遇到这种相当复杂的问题的时候,直接恢复就可以解决。
虽然我有时间机器备份,但是我就不恢复。哎,就是玩儿!

源于对音乐和科技的热爱
留言