将Windows子系统用于Linux时无法导入“ collections.abc”

时间:2019-05-27 20:18:38

标签: python windows-subsystem-for-linux

我正在使用Windows子系统(用于Linux(特别是Windows的Ubuntu))运行一些python代码。当我尝试运行以下命令:“ import collections.abc”时,出现以下错误:“ ImportError:没有名为abc的模块”。

我可以导入'collections',但是如果尝试:'collections.abc',则会出现以下错误:'AttributeError:'module'对象没有属性'abc'。

此外,我尝试在不使用Windows版Ubuntu的情况下在命令提示符下导入模块,并且导入成功。

默认情况下,“集合”模块应包含在python中,因此我不确定为什么会出现此错误。

1 个答案:

答案 0 :(得分:0)

来自Python 3 documentation for the collections module

  

在版本3.3中已更改:   Collections Abstract Base Classes   到collections.abc   模块。为了向后兼容,它们仍然可见   通过Python 3.7在此模块中。   随后,它们将被完全删除。

因此collections.abc中任何已经存在的内容 在collections中找到了Python <= 3.2,包括Python 2, 直接。

要支持所有版本的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代替 collections.abc.Sequence在Python> = 3.3和 collections.Sequence在Python <= 3.2。

this other answer中查看更长的讨论。