Pomiń monit o potwierdzenie odinstalowania programu pip


86

Próbuję odinstalować wszystkie pakiety django w moim środowisku superużytkownika, aby upewnić się, że wszystkie moje zależności aplikacji internetowej są zainstalowane na moim virtualenv.

sudo su
sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall

Ale pip chce potwierdzić każdą dezinstalację pakietu i wydaje się, że nie ma -yopcji dla pip. Czy jest lepszy sposób na odinstalowanie partii modułów Pythona? Czy rm -rf .../site-packages/to właściwy sposób? Czy istnieje alternatywa easy_install?

Alternatywnie, byłoby lepiej wymusić na pip, aby zainstalował wszystkie zależności w virtualenv, zamiast polegać na modułach Pythona w systemie, aby spełnić te zależności, np. pip --upgrade installWymuszając zainstalowanie nawet równie starych wersji, aby nadpisały jakiekolwiek moduły systemowe. Próbowałem aktywować moje virtualenv, a to pip install --upgrade -r requirements.txtwydaje się instalować zależności, nawet te istniejące w mojej ścieżce systemowej, ale nie mogę być pewien, czy to dlatego, że moje moduły systemu były stare. I man pipnie wydaje się gwarantować takiego zachowania (tj. Instalowanie tej samej wersji pakietu, która już istnieje w systemie pakiet-lokacji).

Odpowiedzi:


197

począwszy od wersji pip 7.1.2 można uruchomić pip uninstall -y <python package(s)>

pip uninstall -y package1 package2 package3

lub z pliku

pip uninstall -y -r requirements.txt

65

Pip NIE zawiera opcji --yes (od wersji pip 1.3.1).

OBEJŚCIE: rura tak!

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

2
ach, jakie to proste. dzięki za przypomnienie o programie unix. yesjest bardzo przydatne.
płyty grzejne

ale nie sądzę, żeby to zadziałało (zbyt nieśmiałe, aby wypróbować to dzisiaj w moim systemie). yes | sudo pip freeze | grep -E '^django-' | xargs pip -q uninstallponieważ yeses dostanie wchłonięta przez pip freezenie w xargs/ polecenia argumentów, pip uninstall.
płyty grzejne

3
pip freeze > all_to_uninstall.txt yes | pip uninstall -r all_to_uninstall.txt
Nick

8

Jeśli chcesz odinstalować każdy pakiet z requirements.txt,

pip uninstall -y -r requirements.txt

1

Alternatywnie, czy lepiej byłoby wymusić na pip, aby zainstalował wszystkie zależności w virtualenv, zamiast polegać na modułach systemu Python, aby spełnić te zależności,

Tak. Nie zadzieraj zbytnio z wbudowanymi pakietami zainstalowanymi w systemie. Wiele pakietów systemowych, szczególnie w OS X (nawet debian i pochodne odmiany) zbytnio od nich zależy.

pip --upgrade install, ale wymusza zainstalowanie nawet równie starych wersji, aby nadpisały wszelkie moduły systemowe.

Nie powinno być wielkim problemem, jeśli jest kilka dodatkowych pakietów zainstalowanych w venv, które są już w pakiecie systemowym, szczególnie jeśli są w innej wersji. O to właśnie chodzi w virtualenv.

Próbowałem aktywować virtualenv, a następnie pip install --upgrade -r Requirements.txt i wydaje się, że instaluje zależności, nawet te istniejące w mojej ścieżce systemowej, ale nie mogę być pewien, czy to dlatego, że moje moduły systemowe były stare. Wydaje się, że man pip nie gwarantuje takiego zachowania (tj. Instalowania tej samej wersji pakietu, który już istnieje w systemie-pakietach).

Nie, nie instaluje pakietów znajdujących się już w głównej instalacji, chyba że użyłeś --no-site-packagesflagi do ich utworzenia lub wymagane i obecne wersje są różne.


1

Lakshman Prasad miał rację pip --upgradei / lub virtualenv --no-site-packagesjest właściwą drogą. Odinstalowywanie modułów Pythona dla całego systemu jest złe.

--upgradeOpcja PIP powoduje zainstalowania wymaganych modułów w wirtualnym env, nawet jeśli już istnieje w środowisku systemowym, a nawet jeśli wymagana wersja lub najnowsza dostępna wersja jest taka sama jak wersja systemu.

pip --upgrade install

Użycie opcji --no-site-packages podczas tworzenia środowiska wirtualnego zapewnia, że ​​brakujące zależności nie mogą być maskowane przez obecność brakujących modułów w ścieżce systemowej. Pomaga to ujawnić problemy podczas migracji modułu z jednego pakietu do drugiego, np. Pinax.apps.groups -> django-groups, szczególnie gdy problem dotyczy załadowania instrukcji templatetags w django, które przeszukują wszystkie dostępne moduły w poszukiwaniu katalogów templatetags i definicji tagów w ciągu.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.