【问题标题】:Pip error (cannot import name 'main' from 'pip') after upgrading to python 3.8 (Debian 9)升级到 python 3.8 (Debian 9) 后 Pip 错误(无法从“pip”导入名称“main”)
【发布时间】:2020-05-16 04:33:04
【问题描述】:

我需要升级 Python 以安装需要版本>3.5.4 的包 (PyMC3)。我安装了 python 3.8.3 没有任何问题(安装必备库,使用 wget 从官方 repo 获取文件,使用 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 的方法。 无论如何,我猜这个问题不再适合stackoverflow。我会尝试超级用户或类似的。

【问题讨论】:

  • apt install python3-pip
  • 完成,但失败:"Reading package lists... Done Building dependency tree Reading state information... Done python3-pip is already the newest version (9.0.1-2+deb9u1). 0 upgraded, 0 newly installed, 0 to remove and 101 not upgraded. 1 not fully installed or removed. After this operation, 0 B of additional disk space will be used. Do you want to continue? [Y/n] y /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

标签: python-3.x pip debian pymc3


【解决方案1】:

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

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

这里安装了 anaconda 的 python3 优先于操作系统级别的 Python3。由于您的python3 不在/usr/bin 中,但pip3 是,我假设在某个时候,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

【讨论】:

  • 谢谢!第一个问题在重新安装 Anaconda 后得到解决。关于第二个问题,你是对的:pip3 没有指向 python 文件夹。我设法解决了 pip3 问题:pip3 --version pip 20.2.2 from /usr/local/lib/python3.8/site-packages/pip (python 3.8),它与您提到的导入行相同。但是 pip 文件是相同的,并且位于同一文件夹中:pip --version pip 20.2.2 from /usr/local/lib/python3.8/site-packages/pip (python 3.8) 可以吗?还是应该指向我的python 2.7(位于usr/bin)?
  • 我已经意识到 python 版本管理是一个完整的夜间名称,除非 .. 无论如何给你我的看法,运行 which pipwhich pip3,理想情况下它应该在同一个位置你的which pythonwhich python3which python3.8 和shebang 应该指向同一个位置。任何其他值,一旦安装 python 或由于某种原因 $PATH 更改,它可能会再次中断。
  • 我会检查shebangs并尝试修复它(目前pip和pip3都指向python 3.8,因为它们都在同一个文件夹中(我在python中有一个pip(2, 7) 文件夹,但它没有被使用。现在我有一个与 apt-get 相关的问题(在尝试修复所有这些混乱时出现)。我已将其发布为另一个问题(unix.stackexchange.com/questions/597833/…)。谢谢!
猜你喜欢
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
相关资源
最近更新 更多