Подтвердить что ты не робот

Подтверждение обхода

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

4b9b3361

Ответ 1

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

Ответ 2

В комплект поставки не входит опция --yes (начиная с версии 1.3.1).

WORKAROUND: да, да!

$ sudo ls  # enter pw so not prompted again
$ /usr/bin/yes | sudo pip uninstall pymongo

Ответ 3

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

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

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

Это не должно быть большой проблемой, если в вену есть еще несколько пакетов, которые уже есть в системном пакете, особенно если они имеют разную версию. То есть весь смысл virtualenv.

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

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

Ответ 4

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

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

pip --upgrade install

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

Ответ 5

pip install -U xxxx 

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

Ответ 6

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

pip uninstall -y -r requirements.txt