Я пытаюсь удалить все пакеты 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
, похоже, не гарантирует такого поведения (т.е. установка той же версии пакета, которая уже существует в системных пакетах сайта).
yes
так полезно.yes | sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall
потому чтоyes
es будет поглощенpip freeze
неxargs
аргументом / командойpip uninstall
.pip freeze > all_to_uninstall.txt
yes | pip uninstall -r all_to_uninstall.txt
Если вы хотите удалить все пакеты из
requirements.txt
,источник
Да. Не связывайтесь слишком сильно с пакетами, установленными встроенной системой. Многие системные пакеты, особенно в OS X (даже debian и производные версии) слишком сильно зависят от них.
Это не должно иметь большого значения, если в venv установлено еще несколько пакетов, которые уже есть в системном пакете, особенно если они имеют другую версию. В этом весь смысл virtualenv.
Нет, он не устанавливает пакеты, которые уже находятся в основной установке, если вы не использовали
--no-site-packages
флаг для его создания или если требуемая и текущая версии отличаются.источник
Лакшман Прасад был прав,
pip --upgrade
и / илиvirtualenv --no-site-packages
это правильный путь. Удаление общесистемных модулей Python - это плохо.Параметр
--upgrade
pip действительно устанавливает необходимые модули в виртуальном окружении, даже если они уже существуют в системной среде, и даже если требуемая версия или последняя доступная версия совпадает с версией системы.А использование опции --no-site-packages при создании виртуальной среды гарантирует, что отсутствующие зависимости не могут быть замаскированы наличием отсутствующих модулей в системном пути. Это помогает выявить проблемы во время миграции модуля из одного пакета в другой, например pinax.apps.groups -> django-groups, особенно когда проблема связана с операторами load templatetags в django, которые ищут все доступные модули для каталогов templatetags и определений тегов. в.
источник
может обойти подтвердить
источник