升级到 python 3.8 (Debian 9) 后出现 Pip 错误(无法从 'pip' 导入名称 'main')

Pip error (cannot import name 'main' from 'pip') after upgrading to python 3.8 (Debian 9)

我需要升级 Python 以安装需要版本 >3.5.4 的软件包 (PyMC3)。我安装了 python 3.8.3 没有任何问题(安装必备库,使用 wget 从官方仓库获取文件,使用 make altinstall 等),但是当我检查 python 版本时:

eric@debian:/$ python3 --version
Python 3.6.9 :: Anaconda, Inc.
eric@debian:~$ python3.8 --version
Python 3.8.3

(老实说,我不记得在这台电脑上安装过 anaconda!;根据 pymc3 安装错误,我的版本是 3.5.4)。我尝试使用更新替代方案修复它:

eric@debian:~$ update-alternatives --config python3
There are 2 choices for the alternative python3 (providing /usr/bin/python3).

  Selection    Path                              Priority   Status
------------------------------------------------------------
* 0            /usr/local/bin/python3.8           10        auto mode
  1            /home/eric/anaconda2/bin/python3   2         manual mode
  2            /usr/local/bin/python3.8           10        manual mode

但是 python3 --version 继续抛出 Python 3.6.9 :: Anaconda, Inc. 当我尝试使用 pip 时:

eric@debian:~$ sudo pip3 pymc3
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main' from 'pip' (/usr/local/lib/python3.8/site-packages/pip/__init__.py)

看完相关问题后,我尝试重新安装python3-pip,但它已经是最新版本了。我尝试使用 sudo python3 -m pip uninstall pip 卸载它,但它给了我一堆红色错误行,sudo -H pip3 install --upgrade pip 也不起作用(名称 'main' 的相同 ImportError)。顺便说一句:

eric@debian:~$ which pip3 pip
/usr/bin/pip3
/home/eric/anaconda2/bin/pip
eric@debian:~$ pip --version
pip 19.3.1 from /home/eric/anaconda2/lib/python3.6/site-packages/pip (python 3.6)
eric@debian:~$ pip3 --version
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main' from 'pip' (/usr/local/lib/python3.8/site-packages/pip/__init__.py)

提前致谢!

编辑:在多次尝试与此 ImportError 和 PATH 环境相关的帖子后,我删除了 Anaconda2(已损坏)并安装了 Anaconda3。它工作正常,但是当我尝试 pip3 --version:

bash: /usr/bin/pip3: /usr/bin/python3: bad interpreter: No such file or directory

(但确实存在)。例如,当我尝试使用 sudo apt remove python3-pip:

删除 pip3 时
/bin/sh: 1: /usr/bin/apt-listchanges: not found
E: Sub-process /usr/bin/apt-listchanges --apt || test $? -lt 10 returned an error code (1)
E: Failure running script /usr/bin/apt-listchanges --apt || test $? -lt 10

所以我对 apt 有疑问,尽管阅读和尝试了很多小时,但我找不到删除、升级甚至重新安装 apt 的方法。 反正我猜这个题已经不适合用Whosebug了。我会尝试使用超级用户或类似的东西。

我 运行 遇到了类似的问题,当时我试图将 docker 容器中的自编译 python 构建复制到生产机器。我将对第一个问题进行猜测并为第二个问题提供解决方案:

问题 1:
ImportError: cannot import name 'main' from 'pip' (/usr/local/lib/python3.8/site-packages/pip/__init__.py)

此处安装的 anaconda python3 优先于 OS 级别 Python3。因为你的 python3 不在 /usr/binpip3 在,所以我假设 python3 已从 /usr/bin 中删除。从更新中扣除 here

问题 2:
bash: /usr/bin/pip3: /usr/bin/python3: bad interpreter: No such file or directory

基本上这里发生的事情是 shebang 是 pip3 脚本指向 /usr/bin/python3 但在你的机器上 python 在那里不可用,所以它失败了。因为你用 altinstall 制作了 python,甚至 pip 也被重命名为 pip3.8 并且使用它会很好。或者,使用正确的 python 位置更新 pip3 脚本也可能有所帮助,但在我编译的 python 中,导入如下:from pip._internal.cli.main import main