Pip 在 Ubuntu 上无法在 Python 3.10 上运行

116

我刚接触Ubuntu和Linux系统。我试图通过使用sudo apt-get install python3.10来更新Python. 当我运行python3.10 -m pip install <library name>时,总是会出现以下错误:

Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/usr/lib/python3/dist-packages/pip/__main__.py", line 19, in <module>
    sys.exit(_main())
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/main.py", line 73, in main
    command = create_command(cmd_name, isolated=("--isolated" in cmd_args))
  File "/usr/lib/python3/dist-packages/pip/_internal/commands/__init__.py", line 96, in create_command
    module = importlib.import_module(module_path)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/lib/python3/dist-packages/pip/_internal/commands/install.py", line 24, in <module>
    from pip._internal.cli.req_command import RequirementCommand
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/req_command.py", line 15, in <module>
    from pip._internal.index.package_finder import PackageFinder
  File "/usr/lib/python3/dist-packages/pip/_internal/index/package_finder.py", line 21, in <module>
    from pip._internal.index.collector import parse_links
  File "/usr/lib/python3/dist-packages/pip/_internal/index/collector.py", line 12, in <module>
    from pip._vendor import html5lib, requests
ImportError: cannot import name 'html5lib' from 'pip._vendor' (/usr/lib/python3/dist-packages/pip/_vendor/__init__.py)```

我已经尝试运行sudo apt-get install python3.10-html5lib,它下载了一些东西,但没有修复错误。我该如何解决这个错误?


3
安装python时需要注意,pip不会自动安装。你需要单独安装该模块,可以参考nnn的答案中的方法。 - Timo
我在一个虚拟环境中使用 easy_install -U pip 修复了这个问题。 - scr
11个回答

197

这很可能是由于系统上安装的 pip 版本过旧所致。

请执行以下命令安装最新版本:
curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10

然后测试结果。

python3.10 -m pip --version

e.g.

pip 22.2.2 from <home>/.local/lib/python3.10/site-packages/pip (python 3.10)

然后测试升级

python3.10 -m pip install --upgrade pip

例如

Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: pip in <home>/.local/lib/python3.10/site-packages (22.2.2)

7
不要按照第一个谷歌搜索结果来安装 pip,因为它会在今天的 Ubuntu 20.04 上同时安装 Python 3.8 和 pip。相反,可以使用命令 apt install python3-pip 来安装 pip。请注意不要改变原意。 - Timo
32
在使用从 deadsnakes-ubuntu-ppa-focal.list 安装的 python3.10Ubuntu 20.04 上,我遇到了 ModuleNotFoundError: No module named 'distutils.cmd' 错误。 - Timo
15
你可以从 deadsnakes 仓库使用 apt install python${PYTHON_VERSION}-distutils 安装,但请告诉我当你用 pip3.10 成功安装 numpy 的时候。 - mirekphd
@mirekphd 谢谢你的提示,我会尝试使用numpy - 另外提醒一下:如果你在评论中加上“at sign plus user”,那么我就能知道你在对我说话了。 - Timo
14
如果您想知道这条命令如何工作:curl 用于从给定链接下载文件,参数 -sS 表示 s (小写 s) 代表 silent(静默执行),S (大写 S) 代表 show error(显示错误)。Curl 将下载包含一些 Python 代码的 get-pip.py 文件,然后我们将代码传递给 python3.10 命令,这样 python3.10 将运行 get-pip.py,从而安装最新版本的 pip。 - Udesh
显示剩余2条评论

36

我尝试了上面所有的答案,但都不起作用。我的python3版本是3.10.2。

因此,我需要安装适合pip的版本。

但是,我已经尝试过了。

curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10

但是没有奏效,我尝试了

curl https://bootstrap.pypa.io/get-pip.py | sudo python3

这对我起作用了


谢谢,真的救了我的一天!使用sudo命令时很重要。 - mingchau
你应该小写sudo,这样它在复制和粘贴时就不会失败。 - Tushar
这个为什么会有效的逻辑解释是什么? - matanster
愿SO之神保佑你。 - Chris
1
这里的区别是:使用sudo命令时,将影响整个系统;而不使用sudo命令时,只会对当前用户生效。 - 4t8dds

16

这是@mirekphd评论的扩展版本,他给了我一个解决方案,在我的笔记本电脑和我们的服务器上都完美地运行而不会弄乱任何东西。

第一步,如果还没有完成,就是添加“deadsnakes”仓库,以便可以下载并保持最新的与Python相关的软件。

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:deadsnakes/ppa

如果您尚未安装Python 3.10,您可以使用以下命令进行安装:

sudo apt install python3.10

最后,为了让pip工作,您需要安装与3.10兼容的distutils软件包:

apt install python3.10-distutils

之后您可以以下列方式使用pip

python3.10 -m pip _rest_of_the_pip

上述是必要的,因为常规的pip命令会使用系统默认的Python版本而不是3.10。

如果您经常使用pip,则可以将别名添加到您的.bashrc文件中,例如:

alias pip310='python3.10 -m pip'

之后,您可以像这样使用它:

pip310 install blah

ERROR: unknown command "_rest_of_the_pip" - matanster
1
_rest_of_the_pip 的意思是你应该在那里放置你想要的 pip 命令参数。例如:python3.10 -m pip install pandas - BenVida

11

我在GitHub Actions中遇到了这个问题。我的解决方案是使用虚拟环境来隔离其他系统。请确保python3.10-venv已安装,然后执行以下操作:

python3.10 -m venv .venv
source .venv/bin/activate
pip install ...
...
deactivate

3
这应该是正确的答案。 - adem.sh

7

Install python 3.10, pip and venv in Ubuntu 18|20

sudo apt update && sudo apt upgrade -y
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.10
python3.10 --version
curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10
python3.10 -m pip --version
python3.10 -m pip install --upgrade pip
sudo apt install python3.10-venv

创建虚拟环境,
python3.10 -m venv venv3.10
source venv3.10/bin/activate

2

尝试:

pip3.10 install <package name>

确保您拥有最新版本的pip和python3.10


最新的pip版本为21.3.1。你尝试过上述命令吗? - EdisonMaxwell
谢谢!这对我的情况起作用了 :v - PaPu

2

我也遇到了安装pip的问题。

在Linux Mint Cinnamon 20.2系统中,使用命令sudo apt install python3-pip仍然会引用pip3.8版本,因此需要采用其他方式安装pip。

使用命令curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10后,发现无法找到pip模块。

ImportError: No module named 'pip._internal'

我发现ensurepip命令内置且针对python3.10目录正确。

运行命令python3.10 -m ensurepip会安装setuptools和pip并修复缺失的pip模块。

可以使用命令python3.10 -m pip install -U pip升级pip。

在需要使用sudo权限时同样适用。


4
显然在Ubuntu/Debian中无法使用ensurepip/usr/bin/python3.10: No module named ensurepip). - mirekphd
我也不知道 :/ 我只是在我的Python3.10上使用ensurepip(从deadsnake ppa下载),它修复了我的pip安装。 - Quentium
AttributeError: 模块'collections'没有'MutableMapping'属性。 出现错误。 - ScipioAfricanus
1
我必须运行 python 3.10 -m ensurepip --upgrade 才能获取所需的 pip 版本。 - LyteFM

1
安装Python和pip 3.10的Ubuntu代码已经提供,只需在官方基于Debian的Python 3.10镜像的Dockerfile中将基础镜像更改为最新的Ubuntu LTS版本(即ubuntu:focal),就可以了。我使用了Python 3.10 bullseye slim Dockerfile。Docker构建仅花费了8分钟,这里有证据表明pip3.10确实可以正常工作。请注意保留HTML标签。
$ docker run mirekphd/python3.10-ubuntu20.04 pip -V

输出:

pip 21.3.1 from /usr/local/lib/python3.10/site-packages/pip (python 3.10)

或者一个更高级的例子:
$ docker run -it --rm --name python3.10-ubuntu20.04 mirekphd/python3.10-ubuntu20.04:latest bash -c 'pip --version; pip install numpy --user --no-cache; pip show numpy; python -c "import numpy as np; print(np.ones(5))"'

输出:

pip 21.3.1 from /usr/local/lib/python3.10/site-packages/pip (python 3.10)
Collecting numpy
  Downloading numpy-1.21.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.9 MB)
     |████████████████████████████████| 15.9 MB 34.6 MB/s            
Installing collected packages: numpy
  WARNING: The scripts f2py, f2py3 and f2py3.10 are installed in '/root/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed numpy-1.21.4
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
Name: numpy
Version: 1.21.4
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email: 
License: BSD
Location: /root/.local/lib/python3.10/site-packages
Requires: 
Required-by: 
[1. 1. 1. 1. 1.]

注意:要升级pip,我只需在CMD之前添加这一行代码:
RUN python -m pip install --upgrade pip

1

在撰写本文时,根据以下链接所述,Python 3.10仍不稳定。也许测试一下python3.9会是个好主意,看看问题是否出现在您的本地安装中。
无论如何,从干净的Ubuntu(docker)安装开始,通过运行以下命令(具有sudo权限):

apt-get install software-properties-common 
apt-get install python3.9
python3.9 --version
#
apt-get install python3.10
python3.10 --version

我得到了两个答案,分别是 Python 3.9.5bash: python3.10: command not found。所以我想问题可能出在 Python 3.10 软件源中... 目前为止。

然而,apt-get install 不会直接更新您的 "默认" Python 版本。您可以使用以下命令检查已安装的 Python 版本:

python --version
python3 --version

如果您仍然想安装Python3.10,也许上面的链接可以帮助您。

OP已经安装了Python3.10,可能是在添加第三方仓库后进行的,例如sudo add-apt-repository ppa:deadsnakes/ppa && sudo apt update - nnn

0
在Ubuntu上安装了Python 3.10并且原本已经有Python 3.8的情况下,我遇到了同样的错误。 卸载pip并重新安装即可。
sudo apt-get remove -y python3-pip    
sudo apt-get install -y python3-pip

这对我有用,但是pip3.10安装模块名时出现了相同的错误,而python3.10 -m pip install modulename可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接