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



我需要升级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

(但它确实存在(。当我尝试删除 pip3 时,例如sudo apt remove python3-pip

/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 的方法。 无论如何,我想这个问题已经不适合堆栈溢出了。我会尝试超级用户或类似的东西。

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

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

在这里,anaconda 安装的 python3 优先于操作系统级别的 Python3。由于您的python3不在/usr/binpip3,我假设在某个时候,python3 已从/usr/bin中删除。从此处的更新中扣除

问题 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

最新更新