使用适用于 Linux 的 Windows 子系统时无法导入'collections.abc'



我正在使用适用于Linux的Windows子系统(特别是适用于Windows的Ubuntu(来运行一些python代码。当我尝试运行以下内容:"import collections.abc"时,出现以下错误:"导入错误:没有名为abc的模块"。

我可以导入"集合",但是如果我尝试:"collections.abc",则会收到以下错误:"属性错误:"模块"对象没有属性"abc"。

此外,我尝试在命令提示符下导入模块而不使用 Ubuntu for Windows,它已成功导入。

默认情况下,"集合"模块应该包含在python中,所以我不确定为什么它会给我这个错误。

来自 Python 3 collections模块的文档:

在 3.3 版更改: 已移动 集合抽象基类 到collections.abc 模块。为了向后兼容,它们继续可见 在这个模块中,通过 Python 3.7。 随后,它们将被完全删除。

因此,任何已经存在于 collections.abc 的内容Python <= 3.2,包括Python 2,见collections径直。

要支持所有版本的 Python,请使用 try/except 块:

try:  # works in Python >= 3.3
    import collections.abc as collections_abc
except ImportError:  # Python <= 3.2 including Python 2
    import collections as collections_abc

然后使用例如 collections_abc.Sequence而不是 Python 中的collections.abc.Sequence>= 3.3 和 collections.Sequence Python <= 3.2。

在另一个答案中查看更长的讨论。

对于向后兼容的代码,请使用模块六(文档:https://six.readthedocs.io/index.html?highlight=abc#module-six.moves(

例如:

from six.moves.collections_abc import Iterable
isinstance([1, 2, 3], Iterable) # -> True
isinstance({1, 2, 3}, Iterable) # -> True

最新更新