导入错误:无法从'collections'导入名称'MutableMapping'



我已经在我的Python 3.9.0a1alpine Docker 映像上使用 pip 安装了 AWS CLI。安装正常。当我运行aws命令时,出现以下错误。

aws
Traceback (most recent call last):
File "/usr/local/bin/aws", line 27, in <module>
sys.exit(main())
File "/usr/local/bin/aws", line 23, in main
return awscli.clidriver.main()
File "/usr/local/lib/python3.9/site-packages/awscli/clidriver.py", line 68, in main
driver = create_clidriver()
File "/usr/local/lib/python3.9/site-packages/awscli/clidriver.py", line 77, in create_clidriver
load_plugins(session.full_config.get('plugins', {}),
File "/usr/local/lib/python3.9/site-packages/awscli/plugin.py", line 44, in load_plugins
modules = _import_plugins(plugin_mapping)
File "/usr/local/lib/python3.9/site-packages/awscli/plugin.py", line 61, in _import_plugins
module = __import__(path, fromlist=[module])
File "/usr/local/lib/python3.9/site-packages/awscli/handlers.py", line 42, in <module>
from awscli.customizations.history import register_history_mode
File "/usr/local/lib/python3.9/site-packages/awscli/customizations/history/__init__.py", line 24, in <module>
from awscli.customizations.history.db import DatabaseConnection
File "/usr/local/lib/python3.9/site-packages/awscli/customizations/history/db.py", line 19, in <module>
from collections import MutableMapping
ImportError: cannot import name 'MutableMapping' from 'collections' (/usr/local/lib/python3.9/collections/__init__.py)

python --version
Python 3.9.0a1

我是否需要安装任何其他模块来修复此错误消息?

collections.MutableMapping

自Python 3.3以来已被弃用,自Python 3.9以来被正式删除。

文档摘录:

自 3.3 版

起已弃用,将在 3.9 版中删除:已移动 集合将基类抽象到collections.abc模块。

您可以等待 Python 3.9 兼容版本的awscli发布,也可以暂时像这样自己修补aws脚本(在您的/usr/local/bin下(:

...
import collections
from collections import abc
collections.MutableMapping = abc.MutableMapping
import awscli.clidriver

正如其他答案中所述,问题是从 python 3.10 中collections.abccollections的一些别名被弃用。

如果由于第三方导入而无法修改脚本中的导入,作为临时解决方法,您可以在导入有问题的第三方库之前手动执行别名。例如,请参阅以下示例以了解hyper库的导入,这会导致与您类似的问题。

import collections
collections.Iterable = collections.abc.Iterable
collections.Mapping = collections.abc.Mapping
collections.MutableSet = collections.abc.MutableSet
collections.MutableMapping = collections.abc.MutableMapping

我也遇到了此错误,无法使导入解决方法正常工作。

我确实在Google Colab https://colab.research.google.com/上运行了我的工作,它的工作方式有点像Jupyter Notebook,并且代码运行良好,没有MutableMapping问题。我意识到这并非适用于所有用户案例,但这是一种解决方法。

最新更新