Ich versuche, alle Django-Pakete in meiner Superuser-Umgebung zu deinstallieren, um sicherzustellen, dass alle meine Webanwendungsabhängigkeiten auf meiner virtuellen Umgebung installiert sind.
sudo su
sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall
Pip möchte jedoch bestätigen, dass jedes Paket deinstalliert wird, und es scheint keine -y
Option für pip zu geben. Gibt es eine bessere Möglichkeit, einen Stapel von Python-Modulen zu deinstallieren? Ist rm -rf .../site-packages/
ein richtiger Weg zu gehen? Gibt es eine easy_install-Alternative?
Alternativ wäre es besser, pip zu zwingen, alle Abhängigkeiten auf der virtuellen Umgebung zu installieren, als sich auf die System-Python-Module zu verlassen, um diese Abhängigkeiten zu erfüllen, z. B. pip --upgrade install
selbst gleich alte Versionen zu installieren, um alle Systemmodule zu überschreiben. Ich habe versucht, meine virtuelle Umgebung zu aktivieren, pip install --upgrade -r requirements.txt
und das scheint die Abhängigkeiten zu installieren, auch die in meinem Systempfad vorhandenen, aber ich kann nicht sicher sein, ob dies daran liegt, dass meine Systemmodule alt waren. Und man pip
scheint dieses Verhalten nicht zu garantieren (dh die gleiche Version eines Pakets zu installieren, die bereits in den System-Site-Paketen vorhanden ist).
yes
ist so nützlich.yes | sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall
weil dieyes
es durch daspip freeze
nicht dasxargs
Argument / den Befehl verschlungen würden ,pip uninstall
.pip freeze > all_to_uninstall.txt
yes | pip uninstall -r all_to_uninstall.txt
Wenn Sie jedes Paket von deinstallieren möchten
requirements.txt
,quelle
Ja. Verwirren Sie sich nicht zu sehr mit den im eingebauten System installierten Paketen. Viele der Systempakete, insbesondere in OS X (sogar die Debian- und die abgeleiteten Sorten), hängen zu stark von ihnen ab.
Es sollte keine große Sache sein, wenn einige weitere Pakete im venv installiert sind, die bereits im Systempaket enthalten sind, insbesondere wenn sie eine andere Version haben. Das ist der springende Punkt bei virtualenv.
Nein, die bereits in der Hauptinstallation vorhandenen Pakete werden nur installiert, wenn Sie das
--no-site-packages
Flag zum Erstellen verwendet haben oder die erforderlichen und aktuellen Versionen unterschiedlich sind.quelle
Lakshman Prasad hatte Recht
pip --upgrade
und / odervirtualenv --no-site-packages
ist der richtige Weg. Die Deinstallation der systemweiten Python-Module ist fehlerhaft.Die
--upgrade
Option zum Pip installiert die erforderlichen Module in der virtuellen Umgebung, selbst wenn sie bereits in der Systemumgebung vorhanden sind und selbst wenn die erforderliche Version oder die letzte verfügbare Version mit der Systemversion identisch ist.Durch die Verwendung der Option --no-site-packages beim Erstellen der virtuellen Umgebung wird sichergestellt, dass fehlende Abhängigkeiten möglicherweise nicht durch das Vorhandensein fehlender Module im Systempfad maskiert werden können. Dies hilft dabei, Probleme während der Migration eines Moduls von einem Paket in ein anderes aufzudecken, z. B. pinax.apps.groups -> django-groups, insbesondere wenn das Problem darin besteht, templatetags-Anweisungen in django zu laden, die alle verfügbaren Module nach templatetags-Verzeichnissen und den Tag-Definitionen durchsuchen innerhalb.
quelle
kann bestätigen umgehen
quelle