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?

Hossein
quelle
1
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

figleaf == 0.6.1
Nase == 1.1.2
Pinocchio == 0.3
specloud == 0.4.5

$ pip uninstall specloud
$ pip freeze

figleaf == 0.6.1
Nase == 1.1.2
pinocchio == 0,3

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.

BernardoBarreto
quelle
2
Was ist mit exklusiven Abhängigkeitspaketen von specloudPaketen?
Fusion
@Fusion Diese Pakete sind die Abhängigkeit der Specloud.
BernardoBarreto
249

Sie können das Dienstprogramm pip-autoremove installieren und verwenden , um ein Paket sowie nicht verwendete Abhängigkeiten zu entfernen.

# install pip-autoremove
pip install pip-autoremove
# remove "somepackage" plus its dependencies:
pip-autoremove somepackage -y
bwv549
quelle
9
Leider gibt es noch keine echte Python3-Unterstützung (siehe github.com/invl/pip-autoremove/issues/18 ).
Asmaier
10
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

Dies funktionierte auf Pip 1.5.4

Linibou
quelle
40
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

Zumindest hat das bei mir funktioniert ...

David David
quelle
-1

Möglicherweise versuchen Sie es mit https://github.com/cls1991/pef . Es wird das Paket mit allen Abhängigkeiten entfernen.

cls1991
quelle
pef scheint leider nur in virtuellen Umgebungen zu funktionieren.
Bas
Es ist nur aus Sicherheitsgründen, Sie können den Code hacken, einfach den Schutzcode ausschalten.
cls1991
1
Stellt es sicher, dass diese Abhängigkeiten "baumeln", dh von anderen Distributionen nicht benötigt werden?
wim
Ja, es basiert auf Referenzzählung.
Cls1991
Hey Leute, ich habe den Code gegabelt und modifiziert. Bitte finden Sie den Link unten. github.com/nalangekrushna/pef
Krissh