在 macOS 上只要使用 pip 就报错?pip 无端报错详细解决方案

今天随便折腾了一下终端,准备安装 Powerline 的时候发现……

pip install powerline 竟然报错 SyntaxError: invalid syntax

是的,pip 突然就用不了了!


错误重现

大概就是这么随便地来了一下 pip
pip-check-1


原因探索

信息收集

本来想用 pip --version 看一下出错的 pip 的具体版本的,结果……只要执行 pip 都会报错:
pip-check-2

还好有个窍门,在终端里面输入 pip 并按 TAB 键,就可以列出所有开头为 pip 的命令名称。
pip-command-check

然后我们就可以尝试执行所有列出的命令,得到的结果就是 pippip2pip2.7 都会报错。

那就可以肯定,报错的 pip 是基于 Python 2 的了。

基本尝试

不管他到底为什么报错,重装大法永远要最先试一下。

卸载 pip

卸载 pip 一般使用:

pip uninstall pip

pip-uninstall-try

然而我似乎好像大概可能忘了 pip 完全没法用。

但是大佬(?)总会有另一种方法:

python -m pip uninstall pip

也就是使用 python 间接调用 pip 模块。

居然成功了!
python-module-uninstall-pip

再把 pip 装回去

easy_install pip

成功翻车。
install-pip-with-easy-install-try-1

那……再试一下 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

全部完成以后就像这样:
python-package-sha-check

在另外一台电脑上也全部进行一次:
python-package-sha-check-another-pc

果然,SHA256 的值不一样。

虽然我也不确定会不会是系统在目录内某个位置创建了其他的文件,或者在这里存储了日志,才导致压缩包的校验值发生变化。但是接下来的步骤可以证明我的猜测(Python 损坏了)是正确的。

替换 Python 环境文件

一删二挪三解压。
replace-python-files

重新安装 pip

因为我们迁移过来的 Python 环境文件里面已经包含了 pip,所以最好是卸载后再重装一遍 pip 以适应本地环境。

python -m pip uninstall pip

uninstall-pip-in-the-new-python-files

easy_install pip

install-pip-with-easy-install-try-2
???为什么还是翻车了……

没事,再试一下 get-pip.py

python <(curl -s https://bootstrap.pypa.io/pip/2.7/get-pip.py)

很好,成功了。
install-pip-with-get-pip-py

完工验收

pip --version

pip-check-3

再检查一下更新:

pip install --upgrade pip

pip-update-check
get-pip.py 已经为我们安装了最新版。


事后总结

整个错误差不多就处理完毕了,清理一下各种临时文件,就可以继续折腾了(首尾呼应 :doge:)。

处理的过程中有这么几个比较重要的地方:

  1. pip 无论怎么执行都出错的时候,记得使用 python -m pip
  2. easy_install 安装 pip 的方法似乎很不靠谱,在 Linux 上的表现也不是很好;
  3. 更多的安装 pip 的方法可以参阅 Installation - pip documentation v21.1.1

总之,如果你想像我一样在 macOS 里折腾,一定要先做好时间机器的备份,遇到这种相当复杂的问题的时候,直接恢复就可以解决。

虽然我有时间机器备份,但是我就不恢复。哎,就是玩儿!

源于对音乐和科技的热爱

可能感兴趣的文章

留言