![](/img/trans.png)
[英]ImportError: cannot import name 'MutableMapping' from 'collections'
[英]ImportError: cannot import name 'Iterable' from 'collections' in Python
在 Mac 上使用 Atom 在 Python 中工作。 代码:
from rubik.cube import Cube
from rubik_solver import utils
完整错误:
Traceback (most recent call last):
File "/Users/Audey/Desktop/solver.py", line 2, in <module>
from rubik_solver import utils
File "/Users/Audey/Library/Python/3.10/lib/python/site-packages/rubik_solver/utils.py", line 4, in <module>
from past.builtins import basestring
File "/Users/Audey/Library/Python/3.10/lib/python/site-packages/past/builtins/__init__.py", line 43, in <module>
from past.builtins.noniterators import (filter, map, range, reduce, zip)
File "/Users/Audey/Library/Python/3.10/lib/python/site-packages/past/builtins/noniterators.py", line 24, in <module>
from past.types import basestring
File "/Users/Audey/Library/Python/3.10/lib/python/site-packages/past/types/__init__.py", line 25, in <module>
from .oldstr import oldstr
File "/Users/Audey/Library/Python/3.10/lib/python/site-packages/past/types/oldstr.py", line 5, in <module>
from collections import Iterable
ImportError: cannot import name 'Iterable' from 'collections' (/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/collections/__init__.py)
from rubik_solver import utils
是导致错误的原因,因为当我删除它时,错误不会出现。 我不确定是什么导致了错误,并检查了那里的代码并在其他来源上找到了它,所以我确信它应该可以工作。 有什么解决办法吗?
可Iterable
抽象 class 从collections
3.10 中的 collections 中删除。 请参阅 3.9 collections
文档中的弃用说明。 在 3.10 文档的已删除部分中,该项目
collections
模块中删除Collections 抽象基类的已弃用别名。 (由 Victor Stinner 在 bpo-37324 中贡献。)是什么导致你的错误。
您可以改用collections.abc
中的Iterable
,或者如果问题出在无法更新的依赖项中,则使用 Python 3.9。
正如在其他答案中所说,问题是从collections.abc
到collections
的某些别名从 python 3.10 弃用。
如果由于第三方导入而无法修改脚本中的导入,作为临时解决方法,您可以在导入有问题的第三方库之前手动执行别名。 例如,请参阅下面的示例以了解hyper
库的导入,这会导致与您的问题类似的问题。
import collections.abc
#hyper needs the four following aliases to be done manually.
collections.Iterable = collections.abc.Iterable
collections.Mapping = collections.abc.Mapping
collections.MutableSet = collections.abc.MutableSet
collections.MutableMapping = collections.abc.MutableMapping
#Now import hyper
import hyper
在 python 3.10
版中,您应该从collections.abc
导入Iterable
:
from collections.abc import Iterable
或者您可以:
try:
from collections.abc import Iterable
except ImportError:
from collections import Iterable
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.