Ответ 1
начиная с версии 7.1.2, вы можете запустить pip uninstall -y <python package>
Я пытаюсь удалить все пакеты 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
, похоже, не гарантирует такого поведения (т.е. Устанавливает ту же версию пакета, который уже существует в системных сайтах-пакетах).
начиная с версии 7.1.2, вы можете запустить pip uninstall -y <python package>
В комплект поставки не входит опция --yes (начиная с версии 1.3.1).
WORKAROUND: да, да!
$ sudo ls # enter pw so not prompted again
$ /usr/bin/yes | sudo pip uninstall pymongo
Альтернативно, было бы лучше заставить pip установить все зависимости к virtualenv, а не полагаться на модули python системы для удовлетворения этих зависимостей,
Да. Не используйте слишком много встроенных пакетов, установленных системой. Многие системные пакеты, особенно в OS X (даже дебианные и производные варианты), слишком сильно зависят от них.
pip --upgrade install, но для установки даже одинаково старых версий для переопределения любых системных модулей.
Это не должно быть большой проблемой, если в вену есть еще несколько пакетов, которые уже есть в системном пакете, особенно если они имеют разную версию. То есть весь смысл virtualenv.
Я попытался активировать свой virtualenv, а затем pip install --upgrade -r requirements.txt, и похоже, что он устанавливает зависимости, даже те, что существуют в моем системном пути, но я не могу быть уверен, что это связано с тем, что мои системные модули были старыми. И man pip, похоже, не гарантирует такого поведения (то есть устанавливает ту же версию пакета, который уже существует в системных сайтах-пакетах).
Нет, он не устанавливает пакеты уже в основной установке, если вы не использовали флаг --no-site-packages
для его создания, или требуемые и настоящие версии отличаются.
Лакшман Прасад был прав, 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 и определения тегов внутри.
pip install -U xxxx
может обойти подтверждение
Если вы хотите удалить каждый пакет из requirements.txt
,
pip uninstall -y -r requirements.txt