我需要升级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/bin
但pip3
,我假设在某个时候,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