2016-08-02 8 views
1

Я не могу импортировать pkg_resources. Всякий раз, когда я попытался это показываетImportError: Нет модуля с именем 'pkg_resources.extern.six.moves'; 'pkg_resources.extern.six' не является пакетом

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

+0

Пожалуйста, вы можете разместить свой код ... Я думаю, что там может быть импортирования вопрос. Потому что он работает отлично для меня. –

+0

@RohitSalunke Извините, что не понял. У меня нет кода. Я просто не могу импортировать pkg_resources в консоль python3. –

+0

ОК, возможно, проблема в python lib. попробуйте запустить 'sudo apt-get install --reinstall python-pkg-resources'. В моем случае 'import pkg_resources' работает правильно. –

ответ

2

Ну, нет six пакета там. six только имя, определенное в

/usr/lib/python3.5/site-packages/pkg_resources/extern/__init__.py 

Чтобы быть точным, то она выглядит следующим образом:

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

Но VendorImporter довольно редко кусок python, она является частью setuptools поэтому можно ожидать, , Я полагаю. Говоря простыми словами он выполняет импорт из:

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

который не содержит moves Alright:

_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__.py принадлежит setuptools, это то, что мы имеем pected. Теперь

# 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 

Мы видим, что six является частью python-six.

Итак, мы обнаружили, что python-setuptools зависит от python-six. Поэтому python-setuptools dependency chain неверен, так как он не отображает python-six, что иногда случается с менеджерами пакетов (не только pacman, но и все менеджеры пакетов время от времени страдают от проблем с цепочками зависимостей).

Для задачи под рукой, вам необходимо установить python-six вручную, и python-setuptools будет работать, как ожидалось:

pacman -S python-six 

 Смежные вопросы

  • Нет связанных вопросов^_^