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


86

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

Відповіді:


196

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

pip uninstall -y package1 package2 package3

або з файлу

pip uninstall -y -r requirements.txt

65

Pip НЕ включає опцію --yes (станом на версію pip 1.3.1).

ЗАВДАННЯ: труба так до неї!

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

2
ах, як просто. дякую за нагадування про програму unix. yesце так корисно.
конфорки

але я не думаю, що це могло б це спрацювати (занадто боязко, щоб спробувати це на моїй системі сьогодні). yes | sudo pip freeze | grep -E '^django-' | xargs pip -q uninstallтому що yesес б отримати зжер від а pip freezeНЕ xargsаргумент / команди pip uninstall.
плити

3
pip freeze > all_to_uninstall.txt yes | pip uninstall -r all_to_uninstall.txt
Нік


1

Як варіант, чи не було б краще змусити pip встановлювати всі залежності до virtualenv, а не покладатися на системні модулі python для задоволення цих залежностей,

Так. Не варто возитися із вбудованою системою встановлених пакетів. Багато системних пакетів, особливо в OS X (навіть debian та похідні різновиди) занадто сильно залежать від них.

pip --upgrade install, але примушуючи встановлювати навіть однаково старі версії, щоб замінити будь-які системні модулі.

Це не повинно бути великою справою, якщо в системі venv встановлено ще кілька пакетів, які вже є в системному пакеті, особливо якщо вони мають іншу версію. У цьому вся суть virtualenv.

Я спробував активувати мій virtualenv, а потім піп встановити --upgrade -r requirements.txt, і це, здається, встановлює залежності, навіть ті, що існують у моєму системному шляху, але я не можу бути впевнений, що це тому, що мої системні модулі були старими. І man pip, здається, не гарантує такої поведінки (тобто встановлення тієї самої версії пакету, яка вже існує в системних сайтах-пакетах).

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


1

Лакшман Прасад мав рацію, pip --upgradeі / або virtualenv --no-site-packagesце шлях. Видалення загальносистемних модулів python - це погано.

--upgradeМожливість пипа встановити необхідні модулі в віртуальному окр, навіть якщо вони вже існують в середовищі системи, і навіть якщо потрібна версія або остання доступна версія збігається з версією системи.

pip --upgrade install

І використання параметра --no-site-пакети під час створення віртуального середовища гарантує, що відсутні залежності не можуть бути замасковані наявністю відсутніх модулів у системному шляху. Це допомагає виявити проблеми під час міграції модуля з одного пакета в інший, наприклад pinax.apps.groups -> django-groups, особливо коли проблема пов'язана із завантаженням операторів templatetags у django, які шукають у всіх доступних модулях каталоги templatetags та визначення тегів. всередині.


0
pip install -U xxxx 

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


2
Будь ласка, спробуйте написати повний зміст речень і відредагувати частини коду.
YesThatIsMyName
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.