Pip 不适用于 Ubuntu 上的 Python 3.10

Posted

技术标签:

【中文标题】Pip 不适用于 Ubuntu 上的 Python 3.10【英文标题】:Pip is not working for Python 3.10 on Ubuntu 【发布时间】:2021-11-28 20:29:46 【问题描述】:

我是一般使用 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 它下载了一些东西,但它没有修复错误。我应该如何解决这个错误?

【问题讨论】:

重要的是要掌握在安装python 时,pip 不会自动安装。您必须单独安装模块,如in the answer by nnn 【参考方案1】:

这可能是系统pip版本太旧造成的。

通过以下方式安装最新版本:curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10

【讨论】:

Ubuntu 20.04 上安装了来自deadsnakes-ubuntu-ppa-focal.listpython3.10,我得到ModuleNotFoundError: No module named 'distutils.cmd' 你可以从deadsnakes repo 中apt install python$PYTHON_VERSION-distutils,但是当你成功安装numpypip3.10 时请告诉我。 @mirekphd 感谢您的提示,我将尝试使用 numpy - 附带信息:考虑使用“at 符号加用户”向我发送您的评论,以便我能意识到这一点。跨度> 对于那些想知道此命令如何工作的人:curl 用于从给定链接下载文件,参数 -sS 表示 s ( small s) 表示silentS(大写的s)表示show error。 Curl 将下载包含一些 python 代码的 get-pip.py 文件,然后我们将代码传递给 python3.10 命令,这样 python3.10 将运行 get-pip.py 并且这样是最新版本的 pip 将被安装【参考方案2】:

我在 GitHub Actions 中遇到过这个问题。我的解决方案是借助虚拟环境与系统的其余部分隔离。确保 python3.10-venv 已安装,然后执行

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

【讨论】:

这对我有用,谢谢!【参考方案3】:

在撰写本文时,如以下link 所述。 Python 3.10 仍然不稳定。也许最好测试一下 python3.9 会发生什么,看看问题是否出在您的本地安装中。 在任何情况下,通过运行(使用sudo 权限)从干净的 ubuntu(docker)安装开始

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 --version
python3 --version

无论如何,如果你还想安装python3.10,也许上面的链接可以帮助你。

【讨论】:

OP 已经安装了 python3.10,可能是在添加了像sudo add-apt-repository ppa:deadsnakes/ppa &amp;&amp; sudo apt update这样的第三方仓库之后【参考方案4】:

试试:

pip3.10 install <package name>

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

【讨论】:

最新的 pip 版本是 21.3.1。上面的命令你试过了吗?【参考方案5】:

在装有 python 3.8 的 Ubuntu 上安装 python 3.10 后,我遇到了同样的错误。 卸载pip并重新安装

sudo apt-get remove -y python3-pip    
sudo apt-get install -y python3-pip

它对我有用,但是 pip3.10 install modulename 得到了同样的错误,并且 python3.10 -m pip install modulename 工作正常。

【讨论】:

【参考方案6】:

我在安装 pip 时也遇到了一些问题

由于sudo apt install python3-pip 仍然引用 pip3.8(至少在 mint Cinnamon 20.2 上),pip 需要以其他方式安装。

curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10,原来是找不到pip

ImportError: 没有名为“pip._internal”的模块

我发现内置了 ensurepip 命令并针对 python3.10 的正确目录

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

之后可以使用 python3.10 -m pip install -U pip 升级 Pip。

它也适用于 sudo(有一些需要将 pip 作为 sudo 运行)

【讨论】:

显然 ensurepip 在 Ubuntu/Debian 中不可用 (/usr/bin/python3.10: No module named ensurepip) 没有任何线索:/ 我刚刚用我的 python3.10 确保 pip(来自 deadsnake ppa 的 DL),它修复了我的 pip 安装 AttributeError: module 'collections' has no attribute 'MutableMapping' 出错了。【参考方案7】:

为 Ubuntu 安装 python 和 pip 3.10 的代码都在那里,只需交换一行代码就足够了,在Dockerfile 中将基础映像更改为最新的 Ubuntu LTS 版本(即ubuntu:focal)基于 Debian 的官方 python 3.10 镜像(我使用了python 3.10 bullseye slim Dockerfile。Docker 构建只用了 8 分钟,这证明了pip3.10 确实在那里工作:

$ 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

【讨论】:

【参考方案8】:

这是@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

【讨论】:

【参考方案9】:

我已经尝试了上述所有答案,但对我没有任何帮助。我的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

这对我有用

【讨论】:

以上是关于Pip 不适用于 Ubuntu 上的 Python 3.10的主要内容,如果未能解决你的问题,请参考以下文章

反向代理不适用于使用 apache2 的 ubuntu 20 上的 https

python readline模块不适用于Windows?

Ubuntu 18.04 上的“E:无法找到包 python-pip”[重复]

没有名为'pymysql'的模块

Python 3 pip 包安装在 Windows 上的 Ubuntu 上,出现 Errno 22 失败

在 pip 上的 ubuntu python 3.8.2 上安装 Turicreate 时出错