Обход запроса подтверждения для удаления пипса

88

Я пытаюсь удалить все пакеты django в своей среде суперпользователя, чтобы убедиться, что все мои зависимости webapp установлены на моем 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, похоже, не гарантирует такого поведения (т.е. установка той же версии пакета, которая уже существует в системных пакетах сайта).

варочные поверхности
источник

Ответы:

198

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

pip uninstall -y package1 package2 package3

или из файла

pip uninstall -y -r requirements.txt
gbozee
источник
65

Pip НЕ включает параметр --yes (начиная с версии 1.3.1 pip).

РЕШЕНИЕ: трубка да!

$ sudo ls  # enter pw so not prompted again
$ /usr/bin/yes | sudo pip uninstall pymongo
Кевин Дж. Райс
источник
2
ах, как просто. спасибо за напоминание о программе unix. yesтак полезно.
hobs
но я не думаю, что это сработает (слишком робко, чтобы попробовать это в моей системе сегодня). yes | sudo pip freeze | grep -E '^django-' | xargs pip -q uninstallпотому что yeses будет поглощен pip freezeне xargsаргументом / командой pip uninstall.
hobs
3
pip freeze > all_to_uninstall.txt yes | pip uninstall -r all_to_uninstall.txt
Ник
8

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

pip uninstall -y -r requirements.txt
Акилеш Радж
источник
1

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

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

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

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

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

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

Лакшман Прасад
источник
1

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

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

pip --upgrade install

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

варочные поверхности
источник
0
pip install -U xxxx 

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

Prime Lee
источник
2
Пожалуйста, постарайтесь писать полные осмысленные предложения и редактировать части кода.
YesThatIsMyName