Запрос подтверждения обхода для удаления pip - PullRequest
62 голосов
/ 04 марта 2011

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

sudo su
sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall

Но pip хочет подтвердить удаление каждого пакета, и, похоже, опция -y для pip отсутствует. Есть ли лучший способ удалить пакет модулей Python? rm -rf .../site-packages/ правильный путь? Есть ли альтернатива easy_install?

В качестве альтернативы, было бы лучше заставить pip установить все зависимости в virtualenv, а не полагаться на системные модули python для удовлетворения этих зависимостей, например, pip --upgrade install, но для принудительной установки даже одинаково старых версий для переопределения любых системных модулей. Я попытался активировать свой virtualenv, а затем pip install --upgrade -r requirements.txt, и это, кажется, устанавливает зависимости, даже те, которые существуют в моем системном пути, но я не могу быть уверен, что это потому, что мои системные модули были старыми. И man pip, по-видимому, не гарантирует такого поведения (т.е. установка той же версии пакета, который уже существует в системных пакетах сайта).

Ответы [ 6 ]

131 голосов
/ 06 ноября 2015

начиная с версии пипа 7.1.2 вы можете запустить pip uninstall -y <python package>

60 голосов
/ 25 мая 2013

Пипс НЕ включает опцию --yes (с версии 1.3.1 пипса).

ВОЗМОЖНОЕ РЕШЕНИЕ: труба да к нему!

$ sudo ls  # enter pw so not prompted again
$ /usr/bin/yes | sudo pip uninstall pymongo
3 голосов
/ 04 июня 2019

Если вы хотите удалить все пакеты из requirements.txt,

pip uninstall -y -r requirements.txt
1 голос
/ 05 марта 2011

Лакшман Прасад был прав, pip --upgrade и / или virtualenv --no-site-packages - путь.Деинсталляция общесистемных модулей python - это плохо.

Опция --upgrade для pip устанавливает необходимые модули в виртуальной среде, даже если они уже существуют в системной среде, и даже если требуемая версия или последняя доступная версия совпадают с версией системы.

pip --upgrade install

И, используя опцию --no-site-packages при создании виртуальной среды, вы гарантируете, что отсутствующие зависимости не могут быть замаскированы присутствием отсутствующих модулей в системном пути.Это помогает выявить проблемы при переносе модуля из одного пакета в другой, например, pinax.apps.groups -> django-groups, особенно когда проблема связана с инструкциями load templatetags в django, которые ищут во всех доступных модулях каталоги templatetags и определения тегов.внутри.

1 голос
/ 04 марта 2011

В качестве альтернативы, было бы лучше заставить pip установить все зависимости в virtualenv, а не полагаться на системные модули python для удовлетворения этих зависимостей,

Да. Не слишком связывайтесь со встроенными пакетами, установленными в системе. Многие системные пакеты, особенно в OS X (даже Debian и производные варианты) слишком сильно зависят от них.

pip - обновить установку, но принудительно установить даже старые версии для переопределения любых системных модулей.

Это не должно иметь большого значения, если в venv установлено еще несколько пакетов, которые уже есть в системном пакете, особенно если они другой версии. В этом весь смысл virtualenv.

Я попытался активировать свой virtualenv, а затем установить pip --upgrade -r needs.txt, и это, похоже, устанавливает зависимости, даже те, которые существуют в моем системном пути, но я не могу быть уверен, что это потому, что мои системные модули были старые. И man pip, похоже, не гарантирует такое поведение (т.е. устанавливает ту же версию пакета, которая уже существует в системных пакетах сайта).

Нет, он не устанавливает пакеты, уже существующие в основной установке, если вы не использовали флаг --no-site-packages для его создания, или если требуемая и текущая версии отличаются ..

0 голосов
/ 28 июня 2018
pip install -U xxxx 

может обойти подтверждение

...