Ошибка pip3 - объект «_NamespacePath» не имеет атрибута «сортировка»

Я попытался установить пакет через pip3 и получил эту ошибку. Каждая команда pip/pip3, которую я запускаю, дает мне эту ошибку:

alexg@hitbox:~$ pip3 -V
Traceback (most recent call last):
  File "/usr/local/bin/pip3", line 7, in <module>
    from pip import main
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/__init__.py", line 26, in <module>
    from pip.utils import get_installed_distributions, get_prog
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/utils/__init__.py", line 27, in <module>
    from pip._vendor import pkg_resources
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3018, in <module>
    @_call_aside
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3004, in _call_aside
    f(*args, **kwargs)
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3046, in _initialize_master_working_set
    dist.activate(replace=False)
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2578, in activate
    declare_namespace(pkg)
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2152, in declare_namespace
    _handle_ns(packageName, path_item)
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2092, in _handle_ns
    _rebuild_mod_path(path, packageName, module)
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2121, in _rebuild_mod_path
    orig_path.sort(key=position_in_sys_path)
AttributeError: '_NamespacePath' object has no attribute 'sort'

Я пытался запустить pip3 install --upgrade pip setuptools в соответствии с некоторыми ответами, но каждая команда pip выдает ошибку. Я застрял и ничего не могу сделать.

Чем это могло быть вызвано, и как это можно исправить?

Я на Ubuntu 16.04 с Python 3.5.2


person amadispstac    schedule 23.12.2017    source источник
comment
Моя версия setuptools 36.6.0   -  person amadispstac    schedule 23.12.2017
comment
Извините, был невнимателен - не имеет отношения к setuptools как таковому, а к вендорной копии setuptools, которую использует pip.   -  person hoefling    schedule 24.12.2017


Ответы (16)


Я столкнулся с той же проблемой с python 3.5.2 и pip3 (9.0.1). И я исправил это, выполнив обходной путь: https://github.com/pypa/setuptools/issues/885#issuecomment-307696027

В частности, я отредактировал строку № 2121–2122 этого файла: «sudo vim /usr/local/lib/python3.5/dist-packages/pip/_vendor/pkg_resources/__init__.py»

#orig_path.sort(key=position_in_sys_path)
#module.__path__[:] = [_normalize_cached(p) for p in orig_path]
orig_path_t = list(orig_path)
orig_path_t.sort(key=position_in_sys_path)
module.__path__[:] = [_normalize_cached(p) for p in orig_path_t]
person jkjung13    schedule 06.01.2018
comment
Фантастический! Это действительно сработало (где даже удаление и переустановка pip не помогло). - person James; 21.02.2018
comment
Проверьте фактический путь к файлу в сообщении об ошибке: в моем случае это была другая установка Python, поэтому она была где-то еще. Тем не менее, он работал отлично! - person Luis; 07.03.2018
comment
Спасибо. Это решает мою проблему. Убунту 16.04 питон3.6.4 - person user1941407; 21.03.2018
comment
Точный путь к редактируемому файлу можно узнать из трассировки сбоя. Например, посмотрите исходный журнал ошибок, опубликованный @amadispstac: File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2121, in _rebuild_mod_path - person jkjung13; 02.04.2018
comment
конечно, это исправление сломается после обновления pip. - person ebosi; 06.04.2018
comment
Мне также пришлось отредактировать файл "/usr/lib/python3/dist-packages/pkg_resources/__init__.py". И теперь он работает. - person ddas; 30.05.2018

У меня сработало обновление setuptools:

pip3 install --upgrade setuptools
person Thai    schedule 26.07.2018
comment
Рассмотрите возможность использования pip3 install --user --upgrade setuptools, если вы получили ошибку «Отказано в доступе». Ура ^^ - person tngotran; 27.07.2019

Это может показаться странным, потому что у меня была эта проблема, и я пробовал все, что упоминалось в проблемах SO и GitHub. Но затем я установил pip с помощью easyinstall, и команда pip работает. Может быть, теперь есть 2 пакета пипсов. Но ошибка ушла.

easy_install pip

person Foreever    schedule 12.04.2018
comment
Это сработало для меня (хотя мне пришлось переустановить некоторые пакеты) - person an4s; 14.04.2018
comment
После easy_install pip попробовал следующее. pip install --upgrade pip && pip install --upgrade setuptools. Это сработало для меня - person splintercell; 21.08.2019

Я использую virtualenv, и обновление setuptools мне не помогло. Что сработало, так это этот обходной путь:

pip uninstall setuptools -y && pip install setuptools
person mtlynch    schedule 14.01.2019

Еще один ответ, но следующий - это тот, который в конечном итоге решил проблему для меня. Поскольку pip был скомпрометирован, я не мог использовать его для обновления себя или setuptools, а также использование easy_install вызывало ту же проблему. Поэтому я попытался установить pip с помощью Python.

Ответ:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py 
pip install --upgrade setuptools
person Dataman    schedule 08.02.2019

попробуйте -
pip install -U pip
pip install -U setuptools

если редактирование __init__.py не помогает.

person markroxor    schedule 09.09.2018

Я пробовал большинство из предложенных выше решений, но ничего не работало, так как pip3 был полностью нефункциональным, тогда я нашел это: https://deeptalk.lambdalabs.com/t/trying-to-uninstall-tensorflow-or-matplotlib-pip-package-throws-attributeerror--namespacepath-object-has-no-attribute-sort/310

Я думаю, что это, вероятно, проблема с большинством из нас. Я попробовал предложенное решение, и pip3 снова работает.

Для меня matplotlib не присутствовал в dist-пакетах, но вместо этого он был в site-packages, поэтому у меня сработала команда:

sudo rm ~/.local/lib/python3.5/site-packages/matplotlib-3.0.3-py3.5-nspkg.pth

конечно, вам нужно изменить указанный выше путь в зависимости от вашей версии и местоположения matplotlib.

person fraz    schedule 26.04.2019

Вероятно, это означает, что ваши зависимости перепутались.

Попробуйте удалить pip3 с нуля, должно заработать.

Если это не работает, удалите вашу установку pip. В твоем случае:

rm -r /home/alexg/.local/lib/python3.5/site-packages/pip/

И чтобы быть уверенным в следующий раз, лучше всего работать с виртуальными средами :)

person adrpino    schedule 23.12.2017
comment
Я установил pip3 с apt, и даже после очистки python3-pip я получаю ту же ошибку! - person amadispstac; 23.12.2017
comment
Вот что отстойно в Python! - person Naveed; 21.07.2018
comment
@Naveed действительно так! - person adrpino; 23.07.2018

Попробуйте: sudo easy_install pip и затем

sudo easy_install setuptools

Вероятно, это происходит из-за перепутанных зависимостей.

person GLNB    schedule 26.04.2018

У меня была такая же проблема с поэзией.

Бег

poetry run pip install --upgrade pip setuptools

вместо

pip install --upgrade pip setuptools

исправил проблему.

person Kazuya Gosho    schedule 11.01.2019

У меня была такая же проблема, и я не смог запустить какую-либо команду с помощью pip3 (включая любые команды, такие как pip3 install --upgrade pip setuptools).

Единственное исправление, которое я нашел, заключалось в том, чтобы полностью удалить и переустановить python 3 (sudo apt-get remove python3, sudo apt-get install python3, sudo apt install python3-pip), и теперь pip3 снова работает правильно.

person AnotherShruggingPhysicist    schedule 17.01.2019

Перепробовав всевозможные методы, такие как переустановка pip, setuptools, и до сих пор не могу решить проблему. Я следую инструкциям https://github.com/pypa/pip/issues/4216#issuecomment-286348680 и только с внешним предупреждением. После этого я использую pip для удаления matplotlib. Наконец, кажется, все в порядке.

person fordacre    schedule 13.03.2019

У меня была эта проблема постоянно (и я использовал обходной путь ниже, чтобы использовать pip в интерпретаторе python3). К моему удивлению, после удаления всех версий numpy и переустановки последней версии pip снова заработал. Я не могу точно сказать, что произошло, но, возможно, стоит попробовать, если все остальное не помогло.

Обходной путь (собранный из нескольких источников, которые я не помню)

  1. запустить питон3
  2. дважды импортировать пипс (получив ошибку в первый раз)
  3. использовать pip.main в интерпретаторе

Вот стенограмма:

>>> import pip
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py",
    __import__(vendored_name, globals(), locals(), level=0)
ImportError: No module named 'pip._vendor.pkg_resources'

During handling of the above exception, another exception occurred

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 13,
    from pip.exceptions import InstallationError, CommandError, Pi
  File "/usr/lib/python3/dist-packages/pip/exceptions.py", line 6,
    from pip._vendor.six import iteritems
  File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", l
    vendored("pkg_resources")
  File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", l
    __import__(modulename, globals(), locals(), level=0)
                                .
                               etc
                                .
AttributeError: '_NamespacePath' object has no attribute 'sort'
>>> import pip
>>> pkgs = ['asciiplotlib']
>>> pip.main(['install'] + pkgs + ['--upgrade'])
Collecting asciiplotlib
  Using cached https://files.pythonhosted.org/packages/15/c5/46a2d
Installing collected packages: asciiplotlib
Successfully installed asciiplotlib-0.1.8
person Moondoggy    schedule 10.06.2019

Я исправил это следующим образом:

$curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

Для питона2:

$python get-pip.py

Для питона3:

$python3 get-pip.py

Теперь это работает для меня.

person lxy    schedule 23.07.2019

Ни один из других опубликованных ответов не работал у меня, но выполнение следующей команды решило t:

sudo apt-get purge --auto-remove python3-pkg-resources python3-setuptools

person Orny    schedule 01.08.2019

Это для пользователей Windows, которые установили WinPython. Мы даже не смогли запустить команду pip. Удаление и установка Anaconda 3 Мы столкнулись с аналогичной ошибкой. Наконец, мы удалили папку Python, которая находится внутри C:\Users\you\AppData\Roaming\, и удалили папку conda & packages, которая находится внутри C:\Users\you\AppData\Roaming\conda. Тогда это сработало.

person John Prawyn    schedule 23.09.2020