Сбой удаления pip с «принадлежащих ОС» - даже под sudo - PullRequest
0 голосов
/ 07 июня 2018

Я работаю над проектом DevOps для клиента, который использует Python.Хотя я никогда не использовал это профессионально, я знаю несколько вещей, таких как использование virtualenv и pip - хотя и не очень подробно.

Когда я смотрел на промежуточный блок, который я пытался подготовить для запуска функционалатестовый набор, я увидел хаос.Тонны пакетов, установленных по всему миру, и те, которые установлены внутри virtualenv, не соответствующие требованиям. Текст проекта.Ладно, подумал я, там много уборки.Начиная с глобальных пакетов.

Однако я сразу столкнулся с проблемой:

➜  ~ pip uninstall PyYAML
Not uninstalling PyYAML at /usr/lib/python2.7/dist-packages, owned by OS

ОК, кто-то должен был сделать 'sudo pip install PyYAML'.Я думаю, что знаю, как это исправить:

➜  ~ sudo pip uninstall PyYAML
Not uninstalling PyYAML at /usr/lib/python2.7/dist-packages, owned by OS

Э-э, видимо, нет.Поиск выявил некоторые аналогичные конфликты, вызванные тем, что пользователи устанавливали пакеты в обход pip, но я не уверен - почему бы pip даже знал о них, если бы это было так?Если «другим» способом не является размещение их в том же месте, которое бы использовал pip, - но если это так, почему он не может быть удален под sudo?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Пип отказывается удалять эти пакеты, потому что разработчики Debian исправили его так, что он так себя вел.Это позволяет вам одновременно использовать pip и apt.«Оригинальная» программа pip не имеет такой функциональности

Обновление: Мой ответ относится только к старым версиям Pip.В последних версиях Pip настроен на изменение только тех файлов, которые находятся только в его «домашнем каталоге», то есть /usr/local/lib/python3.* для Debian.Для новейших инструментов вы получите эти ошибки при попытке удалить пакет, установленный с помощью apt:

Для pip 9.0.1-2.3~ubuntu1 (установлен из репозитория Ubuntu):

Not uninstalling pyyaml at /usr/lib/python3/dist-packages, outside environment /usr

Для pip 10.0.1 (оригинал, установлен с pypi.org ):

Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
0 голосов
/ 07 июня 2018

Дело не в том, что pip не может установить пакет, потому что у вас недостаточно прав, а потому, что это не пакет, установленный через pip, поэтому он не хочет удалять его.

dist-packages - это место, где находятся пакеты, установленные менеджером пакетов ОС;так как они обрабатываются другим менеджером пакетов (например, apt в Ubuntu / Debian, pacman в Arch, rpm / yum в CentOS, ...) pip их не трогает (но все еще имеетзнать о них как об установленных пакетах, чтобы их можно было использовать для удовлетворения зависимостей от pip установленных пакетов.

Вероятно, вам также следует избегать касаться их, если вы не используетеправильный менеджер пакетов, и даже в этом случае они могут быть установлены автоматически, чтобы удовлетворить зависимости какой-либо программы, поэтому вы не можете удалить их, не нарушив их.Обычно это можно проверить довольно легко, хотя точный путь зависит от того, какой именно дистрибутив Linux вы используете.

...