Wenn ich ein Pip Freeze mache, sehe ich eine große Anzahl von Python-Paketen, die ich nicht explizit installiert habe, z
$ pip freeze
Cheetah==2.4.3
GnuPGInterface==0.3.2
Landscape-Client==11.01
M2Crypto==0.20.1
PAM==0.4.2
PIL==1.1.7
PyYAML==3.09
Twisted-Core==10.2.0
Twisted-Web==10.2.0
(etc.)
Gibt es eine Möglichkeit für mich festzustellen, warum pip diese speziellen abhängigen Pakete installiert hat? Mit anderen Worten, wie bestimme ich das übergeordnete Paket, das diese Pakete als Abhängigkeiten hatte?
Zum Beispiel möchte ich möglicherweise Twisted verwenden und mich nicht auf ein Paket verlassen, bis ich mehr darüber weiß, wie ich es nicht versehentlich deinstalliere oder aktualisiere.
pipdeptree -r
"Zeigt den Abhängigkeitsbaum in umgekehrter Weise an, dh die Unterabhängigkeiten werden mit der Liste der Pakete aufgelistet, die sie darunter benötigen."pipdeptree
ist toll. Leider scheint es nicht für durch Conda installierten Pakete berücksichtigt Abhängigkeiten zu nehmen: zB in ein Conda env womatplotlib
undnumpy
wurden pip installiert wurde, aberscipy
wurde mit Conda installiert ist ,scipy
zeigt sich in der pipdeptree wie keine Depencies hat und keine Familienangehörigen (auchpip show scipy
zeigt keine Anforderungen).python -m pipdeptree
anderes tun (auch wenn die ausführbare Datei auf der virtuellen Umgebung installiert ist), in der nur die Systemabhängigkeiten aufgelistet werden.Der
pip show
Befehl zeigt an, welche Pakete für das angegebene Paket erforderlich sind (beachten Sie, dass das angegebene Paket bereits installiert sein muss):pip show
wurde in der Pip-Version 1.4rc5 eingeführtquelle
pip show
wurde in Version 1.4rc5 eingeführt und ist in der (aktuellen Version) 1.4.1pip freeze | grep -v "\-e" | sed s/\=\=.*// | awk 'system("pip show " $1)' | grep -E '^(Name:|Requires:)' | sed s/Name:/\\\nName:/
- aber es scheint, dass pipdeptree jetzt eine bessere Lösung ist.Wie ich kürzlich in einem hn-Thread sagte , empfehle ich Folgendes:
Haben Sie eine kommentierte
requirements.txt
Datei mit Ihren Hauptabhängigkeiten:Installieren Sie Ihre Abhängigkeiten :
pip install -r requirements.txt
. Jetzt erhalten Sie die vollständige Liste Ihrer Abhängigkeiten mitpip freeze -r requirements.txt
:Auf diese Weise können Sie Ihre Dateistruktur mit Kommentaren beibehalten und Ihre Abhängigkeiten von den Abhängigkeiten Ihrer Abhängigkeiten trennen. Auf diese Weise haben Sie eine viel schönere Zeit an dem Tag, an dem Sie eine davon entfernen müssen :)
Beachte das Folgende:
requirements.raw
Versionskontrolle durchführen, um Ihre vollständige Version wiederherzustellenrequirements.txt
.pip install --no-install <package_name>
diese Option, um bestimmte Anforderungen aufzulisten.quelle
pip freeze -r requirements.txt
nicht weit verbreitet ist. Sehr nützlich für die Pflege der Abhängigkeiten und Unterabhängigkeiten.pip install
nicht mehr unterstützt--no-install
.Sie können auch einen einzeiligen Befehl verwenden, der die Pakete in den Anforderungen an pip show weiterleitet.
quelle
<package_name>==<package_version>
.Zunächst
pip freeze
werden alle derzeit installierten Python-Pakete angezeigt, die nicht unbedingt PIP verwenden.Zweitens enthalten Python-Pakete Informationen zu abhängigen Paketen sowie erforderliche Versionen . Sie können die Abhängigkeiten eines bestimmten Pakets mit den hier beschriebenen Methoden anzeigen . Wenn Sie ein Paket aktualisieren, übernimmt das Installationsskript wie PIP das Upgrade von Abhängigkeiten für Sie.
Um die Aktualisierung von Paketen zu lösen, empfehle ich die Verwendung von PIP-Anforderungsdateien . Sie können definieren, welche Pakete und Versionen Sie benötigen, und diese sofort mithilfe von pip install installieren.
quelle
Verwenden pipupgrade !
pipupgrade zeigt ein Abhängigkeitsdiagramm an und hebt jedes Paket für eine mögliche Aktualisierung hervor (basierend auf der semantischen Versionierung). Außerdem werden widersprüchliche untergeordnete Abhängigkeiten auf hübsche Weise angezeigt.
pipupgrade
stellt außerdem sicher, dass Pakete aktualisiert werden, die in mehreren Python-Umgebungen vorhanden sind. Kompatibel mit Python2.7 +, Python3.4 + und pip9 +, pip10 +, pip18 +, pip19 +.quelle
(Problemumgehung, keine wahre Antwort)
Hatte das gleiche Problem, da lxml nicht installiert wurde und ich wissen wollte, wer lxml benötigt. Nicht wer lxml brauchte . Das Problem wurde umgangen.
Feststellen, wo meine Site-Pakete abgelegt wurden.
Gehen Sie dorthin und rekursives grep für den Import (das --invert-match des letzten grep dient dazu, die eigenen Dateien von lxml aus der Betrachtung zu entfernen).
Ja, keine Antwort darauf, wie man Pip verwendet, aber ich habe aus irgendeinem Grund keinen Erfolg mit den Vorschlägen hier erzielt.
quelle
Ich habe ein schnelles Skript geschrieben, um dieses Problem zu lösen. Das folgende Skript zeigt die übergeordneten (abhängigen) Pakete für ein bestimmtes Paket an. Auf diese Weise können Sie sicher sein, dass ein Upgrade oder die Installation eines bestimmten Pakets sicher ist. Es kann wie folgt verwendet werden:
dependants.py PACKAGENAME
quelle
get_installed_distributions()
Methode nicht mehr verfügbar ist. github.com/pypa/pip/issues/5243