【问题标题】:ImportError: No module named 'pkg_resources.extern.six.moves'; 'pkg_resources.extern.six' is not a packageImportError:没有名为“pkg_resources.extern.six.moves”的模块; 'pkg_resources.extern.six' 不是一个包
【发布时间】:2016-08-02 11:36:21
【问题描述】:

我无法导入 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

【问题讨论】:

  • 您能否发布您的代码...我认为可能存在导入问题。因为它对我来说工作正常。
  • @RohitSalunke 抱歉没听明白。我没有任何代码。我只是无法在 python3 控制台中导入 pkg_resources。
  • 好的,python 库中可能有问题。尝试运行sudo apt-get install --reinstall python-pkg-resources。就我而言,import pkg_resources 工作正常。
  • 已经使用 pacman(arch 中的包管理器)重新安装了 python-setuptools。 pkg-resources 将在设置工具下。对吗?
  • 是的...兄弟,如果您遵循足以获得 pkg-resources 的 python-setup 工具。抱歉无法预测为什么它会卡在那里。

标签: python python-3.x setuptools archlinux


【解决方案1】:

嗯,那里没有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

【讨论】:

    猜你喜欢
    • 2019-07-07
    • 2018-10-16
    • 2014-07-15
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 2016-01-23
    • 2013-03-11
    相关资源
    最近更新 更多