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 -y
opcji 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 install
Wymuszają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.txt
wydaje 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 pip
nie wydaje się gwarantować takiego zachowania (tj. Instalowanie tej samej wersji pakietu, która już istnieje w systemie pakiet-lokacji).
yes
jest bardzo przydatne.yes | sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall
ponieważyes
es dostanie wchłonięta przezpip freeze
nie wxargs
/ polecenia argumentów,pip uninstall
.pip freeze > all_to_uninstall.txt
yes | pip uninstall -r all_to_uninstall.txt
Jeśli chcesz odinstalować każdy pakiet z
requirements.txt
,źródło
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.
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.
Nie, nie instaluje pakietów znajdujących się już w głównej instalacji, chyba że użyłeś
--no-site-packages
flagi do ich utworzenia lub wymagane i obecne wersje są różne.źródło
Lakshman Prasad miał rację
pip --upgrade
i / lubvirtualenv --no-site-packages
jest właściwą drogą. Odinstalowywanie modułów Pythona dla całego systemu jest złe.--upgrade
Opcja 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.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.
źródło
można ominąć potwierdzić
źródło