获取 AttributeError:在 Linux Python 3.10 上使用任何 pip3 命令时,模块“collections”没有属性“MutableMapping”

Adi*_*dav 38 python linux pip attributeerror python-3.x

嘿,我已经在我的 linux (Zorin os lite 15.3 X64) 机器上安装了最新的 python 3.10 和 pip3,但是每当我尝试使用任何 pip3 命令时,我都会收到以下错误例如我使用以下命令:

pip3 冻结

我收到以下错误:

Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 22, in <module>
    from pip._vendor.requests.packages.urllib3.exceptions import DependencyWarning
  File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 73, in <module>
    vendored("pkg_resources")
  File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 33, in vendored
    __import__(modulename, globals(), locals(), level=0)
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 77, in <module>
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/_vendor/packaging/requirements.py", line 9, in <module>
  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 672, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 632, in _load_backward_compatible
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/extern/__init__.py", line 43, in load_module
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/_vendor/pyparsing.py", line 943, in <module>
AttributeError: module 'collections' has no attribute 'MutableMapping'
Run Code Online (Sandbox Code Playgroud)

这在 python 3.9 中运行良好,但是当我更新到 3.10 时,我开始收到此错误。我该如何解决这个问题?

Pau*_*McG 37

pyparsing该问题是由已出售的旧版本引起的pkg_resources,该版本现已成为setuptools.

我认为如果您安装更新的setuptools,事情会运行得更好:

python -m pip install -U setuptools
Run Code Online (Sandbox Code Playgroud)

编辑 - 在 Ubuntu 18.04 上安装我自己的 3.10.1 版本后,我遇到了同样的问题。损坏的 pkg_resources 阻止进行任何更新,因此您的经典 Catch-22。为了开始寻求解决方案,我在 setuptools Github 存储库上提交了一张票证。

EDIT2 - 基于setuptools GitHub repo 上的帮助,我执行了以下步骤:

# add deadsnake repo (default or nightly)
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.10
git clone https://github.com/pypa/setuptools.git && cd setuptools && sudo python3.10 setup.py install
sudo apt install python3.10-distutils
curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10
sudo apt install python3.10-venv
Run Code Online (Sandbox Code Playgroud)

至此,我可以在 Python3.10 中运行 pip,并使用python3.10 -m venv virtualenv-dir.

  • 这对任何人都有效吗?我正在使用通过 pyenv 安装的 python 3.10,但它对我不起作用。如果有什么不同的话,我也在我的环境中使用 Pipenv。 (7认同)
  • pkg_resources 导入打包,它导入 pyparsing。pyparsing 3.0.5 版本包括重大 API 更改,这些更改已在 pyparsing 3.0.6 中重构。如果更新到 pyparsing 3.0.6 后仍然无法工作,请在 pyparsing 的 GitHub 上发布问题。 (2认同)
  • 解决Ubuntu18上python3.10的错误 (2认同)

Dan*_*aun 32

使用下面的代码更新 pip

curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10
Run Code Online (Sandbox Code Playgroud)

  • 如果出现错误:“ModuleNotFoundError:没有名为“distutils.cmd”的模块”,您可能需要执行:“sudo apt-get install python3.10-distutils” (3认同)

小智 -5

更新 pip...collections.MutableMapping 已变为 collections.abc.MutableMapping。