ImportError:没有名为'pkg_resources.extern.six.moves'的模块; 'pkg_resources.extern.six'不是包

时间:2016-08-02 11:36:22

标签: python python-3.x setuptools archlinux

我无法导入pkg_resources。每当我尝试它时显​​示

Python 3.5.2 (default, Jun 28 2016, 08:46:01) 
[GCC 6.1.1 20160602] on linux
Type "help", "copyright", "credits" or "license" for more information.
 >>> import pkg_resources
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 47, in <module>
      from pkg_resources.extern.six.moves import urllib, map, filter
ImportError: No module named 'pkg_resources.extern.six.moves'; 'pkg_resources.extern.six' is not a package

from pkg_resources是否指/usr/lib/python3.5/site-packages/pkg_resources/extern(其中没有六个包)。你能指出我做错了吗?

我正在使用Arch Linux,Python 3.5.2

1 个答案:

答案 0 :(得分:2)

那么,那里没有six包。 six只是

中定义的名称
/usr/lib/python3.5/site-packages/pkg_resources/extern/__init__.py

确切地说,它看起来如下:

names = 'packaging', 'pyparsing', 'six'
VendorImporter(__name__, names).install()

但是VendorImporterpython的一个相当不寻常的部分,它是setuptools的一部分,因此可以预料到,我猜。简单来说,它从以下位置执行导入:

/usr/lib/python3.5/site-packages/six.py

哪个包含moves好吧:

_MovedItems._moved_attributes = _moved_attributes

moves = _MovedItems(__name__ + ".moves")
_importer._add_module(moves, "moves")

现在让我们看看pacman如何处理:

# pacman -Qo /usr/lib/python3.5/site-packages/pkg_resources/extern/__init__.py
/usr/lib/python3.5/site-packages/pkg_resources/extern/__init__.py is owned by python-setuptools 1:25.1.3-1

是的,extern/__init__.pysetuptools所有,这正是我们所期望的。现在

# pacman -Qo /usr/lib/python3.5/site-packages/six.py
/usr/lib/python3.5/site-packages/six.py is owned by python-six 1.10.0-2

我们发现sixpython-six的一部分。

因此,我们发现python-setuptools依赖于python-six。因此,python-setuptools dependency chain不正确,因为它没有列出python-six,这有时是包管理器(不仅是pacman,而是所有包管理器都遇到依赖链问题。时间)。

对于手头的问题,您需要手动安装python-six,然后python-setuptools将按预期工作:

pacman -S python-six