AttributeError:模块“集合”没有属性“MutableMapping”

BRI*_*ANE 77 python pip python-3.x

/usr/bin/python3我最近在我的 ubuntu 系统上安装了 python3.10,我相信我从到建立了一个链接/usr/bin/python3.10

如果我跑步,python --version我会得到Python 2.7.17,如果我跑步,python3 --version我会得到Python 3.10.2

我相信我所做的事情破坏了我的全局 python / pip 中的某些内容。

每当我尝试全局使用 pip 时,都会收到此错误:

Traceback (most recent call last):
  File "/usr/local/bin/pip", line 7, in <module>
    from pip._internal.cli.main 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)

经过谷歌搜索后,我认为问题是我的 pip 是使用旧版本的 python 制作的,所以我尝试运行:

sudo apt remove python-pip python3-pip
sudo apt install python-pip python3-pip
Run Code Online (Sandbox Code Playgroud)

但即使在此之后我仍然遇到与 pip 相同的错误。

我确实有一个与 django 项目(使用 python 3.10)一起使用的 virtualenv,如果我使用它,我可以在那里使用 pip,但我认为这只是显示 venv 中的 pip 已正确配置

运行结果ls -la /usr/bin/ | grep -i

brick@nextgearserver:/etc/apache2$ ls -la /usr/bin/ | grep -i "pip\|python"
lrwxrwxrwx  1 root   root          26 Mar 26  2018 dh_pypy -> ../share/dh-python/dh_pypy
-rwxr-xr-x  1 root   root        1056 Apr 16  2018 dh_python2
lrwxrwxrwx  1 root   root          29 Mar 26  2018 dh_python3 -> ../share/dh-python/dh_python3
lrwxrwxrwx  1 root   root          13 Dec  7  2018 lesspipe -> /bin/lesspipe
lrwxrwxrwx  1 root   root          23 Feb 27  2021 pdb2.7 -> ../lib/python2.7/pdb.py
lrwxrwxrwx  1 root   root          24 Jan 15 13:03 pdb3.10 -> ../lib/python3.10/pdb.py
lrwxrwxrwx  1 root   root          23 Dec  8 16:08 pdb3.6 -> ../lib/python3.6/pdb.py
-rwxr-xr-x  1 root   root         292 Apr 30  2021 pip
-rwxr-xr-x  1 root   root         292 Apr 30  2021 pip2
-rwxr-xr-x  1 root   root         293 Apr 30  2021 pip3
lrwxrwxrwx  1 root   root          31 Oct 25  2018 py3versions -> ../share/python3/py3versions.py
lrwxrwxrwx  1 root   root          26 Mar 26  2018 pybuild -> ../share/dh-python/pybuild
lrwxrwxrwx  1 root   root           9 Apr 16  2018 python -> python2.7
lrwxrwxrwx  1 root   root           9 Apr 16  2018 python2 -> python2.7
-rwxr-xr-x  1 root   root     3633000 Feb 27  2021 python2.7
lrwxrwxrwx  1 root   root          33 Feb 27  2021 python2.7-config -> x86_64-linux-gnu-python2.7-config
lrwxrwxrwx  1 root   root          16 Apr 16  2018 python2-config -> python2.7-config
lrwxrwxrwx  1 root   root          19 Jan 30 15:07 python3 -> /usr/bin/python3.10
-rwxr-xr-x  1 root   root     5515256 Jan 15 13:03 python3.10
-rwxr-xr-x  2 root   root     4526456 Dec  8 16:08 python3.6
lrwxrwxrwx  1 root   root          33 Dec  8 16:08 python3.6-config -> x86_64-linux-gnu-python3.6-config
-rwxr-xr-x  2 root   root     4526456 Dec  8 16:08 python3.6m
lrwxrwxrwx  1 root   root          34 Dec  8 16:08 python3.6m-config -> x86_64-linux-gnu-python3.6m-config
lrwxrwxrwx  1 root   root          16 Oct 25  2018 python3-config -> python3.6-config
-rwxr-xr-x  1 root   root         384 Feb  5  2018 python3-futurize
lrwxrwxrwx  1 root   root          10 Oct 25  2018 python3m -> python3.6m
lrwxrwxrwx  1 root   root          17 Oct 25  2018 python3m-config -> python3.6m-config
-rwxr-xr-x  1 root   root         388 Feb  5  2018 python3-pasteurize
-rwxr-xr-x  1 root   root         152 Nov 11  2017 python3-pbr
lrwxrwxrwx  1 root   root          16 Apr 16  2018 python-config -> python2.7-config
lrwxrwxrwx  1 root   root          29 Apr 16  2018 pyversions -> ../share/python/pyversions.py
-rwxr-xr-x  1 root   root        2971 Feb 27  2021 x86_64-linux-gnu-python2.7-config
-rwxr-xr-x  1 root   root        3246 Jan 15 13:03 x86_64-linux-gnu-python3.10-config
lrwxrwxrwx  1 root   root          34 Dec  8 16:08 x86_64-linux-gnu-python3.6-config -> x86_64-linux-gnu-python3.6m-config
-rwxr-xr-x  1 root   root        3283 Dec  8 16:08 x86_64-linux-gnu-python3.6m-config
lrwxrwxrwx  1 root   root          33 Oct 25  2018 x86_64-linux-gnu-python3-config -> x86_64-linux-gnu-python3.6-config
lrwxrwxrwx  1 root   root          34 Oct 25  2018 x86_64-linux-gnu-python3m-config -> x86_64-linux-gnu-python3.6m-config
lrwxrwxrwx  1 root   root          33 Apr 16  2018 x86_64-linux-gnu-python-config -> x86_64-linux-gnu
python2.7-config
Run Code Online (Sandbox Code Playgroud)

小智 51

就我而言,升级以下软件包适用于 Windows 11:

pip install --upgrade pip wheel setuptools requests
Run Code Online (Sandbox Code Playgroud)


小智 44

我在 ubuntu 22.04 上遇到了同样的错误,这就是我解决它的方法。

如果您使用 apt 安装了 pipelinev,请删除它

sudo apt remove pipenv
Run Code Online (Sandbox Code Playgroud)

安装 pipelinenv 取消 pip

 pip3 install pipenv
Run Code Online (Sandbox Code Playgroud)

激活虚拟环境

python3 -m pipenv shell
Run Code Online (Sandbox Code Playgroud)

从 pip 文件安装

pipenv install
Run Code Online (Sandbox Code Playgroud)

  • 您还需要将其添加到 .bashrc 中的用户路径并刷新它: `export PATH= "$HOME/.local/bin:${PATH}"` (2认同)

Jus*_*ang 43

MutableMapping模块中的属性collections已移至collections.abcin中python3.10

在您的情况下,/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/_vendor/pyparsing.py使用集合的 MutableMapping 属性。

如果您可以访问源代码,请将所有collections.MutableMapping内容替换为collections.abc.MutableMapping.

一个例子 :

import collections 
if sys.version_info.major == 3 and sys.version_info.minor >= 10:

    from collections.abc import MutableMapping
else:
    from collections import MutableMapping
Run Code Online (Sandbox Code Playgroud)

  • 然而,这在所有第三方库中并不是合理可行的 (3认同)

小智 12

我不确定这是否符合“答案”的条件,但要为依赖于 Python 3.10+ 的存在collections.MutableMapping且尚未更新的库的情况提供额外的解决方法,您可以放置​​以下代码直接在导入受影响的库之前:

import sys

if sys.version_info.major == 3 and sys.version_info.minor >= 10:
    import collections
    setattr(collections, "MutableMapping", collections.abc.MutableMapping)
Run Code Online (Sandbox Code Playgroud)


小智 10

3.10在撰写此答案时,有些库与不完全兼容

您可以降级到3.83.9暂时,它将无缝运行

你可以在这里找到 python 的所有版本

选择最适合您的版本


jak*_*bin 5

对于 3.10 或更高版本 \xe2\x80\x93

\n
from collections.abc import MutableMapping\n
Run Code Online (Sandbox Code Playgroud)\n

对于 3.9 或更低版本 \xe2\x80\x93

\n
from collections import MutableMapping\n
Run Code Online (Sandbox Code Playgroud)\n

如果您希望此环境完全动态,请调用以下代码。

\n
import collections \nif sys.version_info.major == 3 and sys.version_info.minor >= 10:\n    from collections.abc import MutableMapping\nelse:\n    from collections import MutableMapping\n
Run Code Online (Sandbox Code Playgroud)\n