Entfernt die Deinstallation eines Pakets mit "pip" auch die abhängigen Pakete?
153
Wenn Sie pipein Paket installieren, werden auch alle erforderlichen Pakete damit installiert (Abhängigkeiten). Entfernt die Deinstallation dieses Pakets auch die abhängigen Pakete?
Warum kannst du es nicht einfach versuchen und sehen? Ich würde genau das tun, um Ihre Frage zu beantworten, aber aus irgendeinem Grund kann pip den Paketindex hier momentan nicht abrufen.
Thomas Vander Stichele
1
Ich habe in der Pip-Newsgroup festgestellt, dass Pip-Leute diese Funktionalität zumindest vorerst nicht wollen. Welch ein Jammer!
Michel Samia
4
@ThomasVanderStichele denn dann wäre die Antwort nicht verfügbar online Zukunft Googler :)
Mark
1
@Mark es wäre, Sie schreiben einfach die Antwort auf Ihre eigene Frage hier.
Thomas Vander Stichele
5
@ThomasVanderStichele: Ich bin nicht der OP, aber hier ist der Grund, warum dies eine sehr legitime Frage und Antwort für SO ist: pipa) notorisch spröde und versionabhängig, auch b) in einigen Kundeninstallationen, mit denen ich arbeiten musste, wurde es installiert Administratorrechte (obwohl Pakete nicht vorhanden waren), daher war das Brechen oder Deinstallieren ein enormer Kummer, und Sie hatten einen Versuch, es richtig zu machen. c) Die Internetverbindung ist möglicherweise nicht besonders gut. Aus Sicherheitsgründen sind Unternehmenscomputer häufig durch eine Firewall geschützt, sodass Sie keine direkte Konnektivität annehmen können. Sie müssen im Voraus alles wissen, was Sie benötigen, sowie die Version und diese herunterladen.
smci
Antworten:
79
Nein, die Abhängigkeitspakete werden nicht deinstalliert. Es wird nur das angegebene Paket entfernt:
$ pip install specloud
$ pip freeze # all the packages here are dependencies of specloud package
Wie Sie diese Pakete sind Abhängigkeiten von sehen specloudund sie sind immer noch da, aber nicht das specloudPaket selbst.
Wie unten erwähnt, können Sie das Dienstprogramm pip-autoremove installieren und verwenden , um ein Paket sowie nicht verwendete Abhängigkeiten zu entfernen.
Funktioniert gut für mich in Python 3 ab Oktober 2019.
Snacks
@oved.by.Jesus - Ich bin auf Python 3.8.3 und habe den Befehl getestet und sehe ihn immer noch als pip-autoremove(Bindestrich nicht unterstrichen). pip_autoremovegibt mir command not found.
bwv549
@ bwv549 Ich muss erklären, dass ich es über ausgeführt habe python<version>(wenn die Version angegeben werden muss). Auf diese Weise müssen wir den Namen anpassen an pip_autoremove(Bindestrich ist als Paketname nicht zulässig). Zum Beispiel python3.8 pip_autoremovefunktioniert aber python3.8 pip-autoremovenicht. Andernfalls pip-autoremovefunktioniert es , wie Sie bereits betont haben, als einfacher Terminalbefehl einwandfrei :) - obwohl nur die Standard-Python-Version des Systems verwendet wird. Danke für deine Nachricht.
Geliebt.von.Jesus
9
Ich habe erfolgreich Abhängigkeiten eines Pakets mit dieser Bash-Zeile entfernt:
for dep in $(pip show somepackage | grep Requires| sed 's/Requires: //g; s/,//g');do pip uninstall -y $dep ; done
Obwohl technisch diese Lösung nicht erfolgreich alle Abhängigkeiten entfernen, wie in den anderen Antworten erwähnt, ist es auch deinstalliert Abhängigkeiten, die an das Ziel nicht eindeutig zuzuordnen , einschließlich von Systempakete installiert diejenigen. Auf meinem System schlug dieses Skript beispielsweise fehl, weil das Zielpaket Abhängigkeiten mit pip gemeinsam hatte. Daher deinstallierte pip seine eigenen Abhängigkeiten, bevor das Skript beendet werden konnte, und schlug dann fehl.
sinisterstuf
19
Beachten Sie, dass dadurch nur die Abhängigkeiten der nächsten Ebene entfernt werden, nicht jedoch die Abhängigkeiten dieser Abhängigkeiten.
Tamakisquare
0
Ich habe die Lösung gefunden, obwohl es für manche etwas schwierig sein könnte, sie durchzuführen.
1. Schritt (für Python3 und Linux):
pip3 installiere pip-autoremove
2. Schritt:
cd /home/usernamegoeshere/.local/bin/
3. Schritt:
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
und ändern Sie alle Pip (s) in pip3. 4. Schritt: ./pip-autoremove packagenamegoeshere
pip
a) notorisch spröde und versionabhängig, auch b) in einigen Kundeninstallationen, mit denen ich arbeiten musste, wurde es installiert Administratorrechte (obwohl Pakete nicht vorhanden waren), daher war das Brechen oder Deinstallieren ein enormer Kummer, und Sie hatten einen Versuch, es richtig zu machen. c) Die Internetverbindung ist möglicherweise nicht besonders gut. Aus Sicherheitsgründen sind Unternehmenscomputer häufig durch eine Firewall geschützt, sodass Sie keine direkte Konnektivität annehmen können. Sie müssen im Voraus alles wissen, was Sie benötigen, sowie die Version und diese herunterladen.Antworten:
Nein, die Abhängigkeitspakete werden nicht deinstalliert. Es wird nur das angegebene Paket entfernt:
Wie Sie diese Pakete sind Abhängigkeiten von sehen
specloud
und sie sind immer noch da, aber nicht dasspecloud
Paket selbst.Wie unten erwähnt, können Sie das Dienstprogramm pip-autoremove installieren und verwenden , um ein Paket sowie nicht verwendete Abhängigkeiten zu entfernen.
quelle
specloud
Paketen?Sie können das Dienstprogramm pip-autoremove installieren und verwenden , um ein Paket sowie nicht verwendete Abhängigkeiten zu entfernen.
quelle
pip-autoremove
(Bindestrich nicht unterstrichen).pip_autoremove
gibt mircommand not found
.python<version>
(wenn die Version angegeben werden muss). Auf diese Weise müssen wir den Namen anpassen anpip_autoremove
(Bindestrich ist als Paketname nicht zulässig). Zum Beispielpython3.8 pip_autoremove
funktioniert aberpython3.8 pip-autoremove
nicht. Andernfallspip-autoremove
funktioniert es , wie Sie bereits betont haben, als einfacher Terminalbefehl einwandfrei :) - obwohl nur die Standard-Python-Version des Systems verwendet wird. Danke für deine Nachricht.Ich habe erfolgreich Abhängigkeiten eines Pakets mit dieser Bash-Zeile entfernt:
Dies funktionierte auf Pip 1.5.4
quelle
Ich habe die Lösung gefunden, obwohl es für manche etwas schwierig sein könnte, sie durchzuführen.
1. Schritt (für Python3 und Linux):
pip3 installiere pip-autoremove
2. Schritt:
cd /home/usernamegoeshere/.local/bin/
3. Schritt:
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
und ändern Sie alle Pip (s) in pip3. 4. Schritt: ./pip-autoremove packagenamegoeshere
Zumindest hat das bei mir funktioniert ...
quelle
Möglicherweise versuchen Sie es mit https://github.com/cls1991/pef . Es wird das Paket mit allen Abhängigkeiten entfernen.
quelle