Gibt es eine Möglichkeit, alle Python PyPI-Pakete zu finden, die mit easy_install oder pip installiert wurden? Ich meine, ausgenommen alles, was mit den Distributionstools installiert wurde / wird (in diesem Fall apt-get on Debian).
Gibt es eine Möglichkeit, alle Python PyPI-Pakete zu finden, die mit easy_install oder pip installiert wurden? Ich meine, ausgenommen alles, was mit den Distributionstools installiert wurde / wird (in diesem Fall apt-get on Debian).
Antworten:
pip freeze
gibt eine Liste der installierten Pakete und ihrer Versionen aus. Außerdem können Sie diese Pakete in eine Datei schreiben, die später zum Einrichten einer neuen Umgebung verwendet werden kann.
https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze
pip freeze
und pip list
alles auflisten. Sie schließen die Pakete nicht aus, die nicht von installiert wurden pip
.
pip freeze
auch in Skripten zuverlässig, während pip list
bei der Verwendung mit Pipes unerwartete Fehler auftreten.
pip list -l
Oder pip list --local
ist die beste Antwort, siehe stackoverflow.com/a/43012269/491884 von @MJB
Ab Version 1.3 von pip können Sie jetzt verwenden pip list
Es bietet einige nützliche Optionen, einschließlich der Möglichkeit, veraltete Pakete anzuzeigen. Hier ist die Dokumentation: https://pip.pypa.io/en/latest/reference/pip_list/
pip freeze
pip list --user
Zeigt nur vom Benutzer installierte Pakete an und schließt systemweite Pakete aus.
Wenn sich jemand wundert, können Sie den Befehl 'pip show' verwenden.
pip show [options] <package>
Dadurch wird das Installationsverzeichnis des angegebenen Pakets aufgelistet.
Wenn sich Debian in Bezug auf das pip install
Standardziel wie die neuesten Ubuntu-Versionen verhält , ist dies kinderleicht: Es wird /usr/local/lib/
anstelle von /usr/lib
( apt
Standardziel) installiert . Überprüfen Sie /ubuntu/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip/259747#259747
Ich bin ein ArchLinux-Benutzer und als ich mit pip experimentierte, stieß ich auf dasselbe Problem. So habe ich es in Arch gelöst.
find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs pacman -Qo | grep 'No package'
Der Schlüssel hier ist /usr/lib/python2.7/site-packages
YMMV, das Verzeichnis, in das pip installiert wird. pacman -Qo
So Bogen pac kage Mann für den Besitz der Datei ager überprüft. No package
ist Teil der Rückgabe, die es gibt, wenn kein Paket die Datei besitzt : error: No package owns $FILENAME
. Tricky Workaround: Ich frage nach, __init__.py
weil pacman -Qo
es ein bisschen unwissend ist, wenn es um Verzeichnisse geht :(
Um dies für andere Distributionen zu tun, müssen Sie herausfinden, wo Dinge pip
installiert werden (nur sudo pip install
etwas), wie der Besitz einer Datei abgefragt wird (Debian / Ubuntu-Methode ist dpkg -S
) und was die Rückgabe "Kein Paket besitzt diesen Pfad" (Debian) ist / Ubuntu ist no path found matching pattern
). Debian / Ubuntu-Benutzer, Vorsicht: dpkg -S
Wird fehlschlagen, wenn Sie ihm einen symbolischen Link geben. Lösen Sie es einfach zuerst mit realpath
. So was:
find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | xargs dpkg -S 2>&1 | grep 'no path found'
Fedora-Benutzer können es versuchen (danke @eddygeek):
find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'
dpkg
schreibe den Fehler in stderr, so dass ich eine Umleitung hinzufügen muss 2>&1
. Und für die internationale Ausgabe hinzufügen LANG=
vor xargs dpkg -s
. und sed
ist auch ein nettes Tool;) um nur den Paketnamen des Pfades zu behalten. Also ende ich mit:find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | LANG= xargs dpkg -S 2>&1 | grep 'no path found' | sed "s/.*\/\([^\/]*\)\/__init__\.py.*/\1/"
Beginnen mit:
$ pip list
Alle Pakete auflisten. Wenn Sie das gewünschte Paket gefunden haben, verwenden Sie:
$ pip show <package-name>
Dies zeigt Ihnen Details zu diesem Paket, einschließlich seines Ordners. Sie können den ersten Teil überspringen, wenn Sie den Paketnamen bereits kennen
Klicken Sie hier für weitere Informationen zur Pip-Show und hier für weitere Informationen zur Pip-Liste.
Beispiel:
$ pip show jupyter
Name: jupyter
Version: 1.0.0
Summary: Jupyter metapackage. Install all the Jupyter components in one go.
Home-page: http://jupyter.org
Author: Jupyter Development Team
Author-email: jupyter@googlegroups.org
License: BSD
Location: /usr/local/lib/python2.7/site-packages
Requires: ipywidgets, nbconvert, notebook, jupyter-console, qtconsole, ipykernel
pip.get_installed_distributions()
gibt eine Liste der installierten Pakete
import pip
from os.path import join
for package in pip.get_installed_distributions():
print(package.location) # you can exclude packages that's in /usr/XXX
print(join(package.location, package._get_metadata("top_level.txt"))) # root directory of this package
Das Folgende ist etwas langsam, aber es gibt eine schön formatierte Liste von Paketen, pip
die bekannt sind. Das heißt, nicht alle wurden "by" pip installiert, aber alle sollten per pip aufgerüstet werden können.
$ pip search . | egrep -B1 'INSTALLED|LATEST'
Der Grund dafür ist, dass es den Inhalt des gesamten Pypi-Repo auflistet. Ich habe ein Ticket eingereicht, das vorschlägt pip list
, ähnliche Funktionen bereitzustellen, jedoch effizienter.
Beispielausgabe: (Die Suche wurde für alle auf eine Teilmenge anstelle von '.' Beschränkt.)
$ pip search selenium | egrep -B1 'INSTALLED|LATEST'
selenium - Python bindings for Selenium
INSTALLED: 2.24.0
LATEST: 2.25.0
--
robotframework-selenium2library - Web testing library for Robot Framework
INSTALLED: 1.0.1 (latest)
$
Hinzufügen zu @Paul Woolcocks Antwort,
pip freeze > requirements.txt
erstellt eine Anforderungsdatei mit allen installierten Paketen zusammen mit den installierten Versionsnummern in der aktiven Umgebung am aktuellen Speicherort. Laufen
pip install -r requirements.txt
installiert die in der Anforderungsdatei angegebenen Pakete.
Neuere Versionen von pip können über pip list -l
oder pip freeze -l
( --list
) tun, was das OP will .
Auf Debian (zumindest) macht die Manpage dies nicht klar, und ich habe es nur entdeckt - unter der Annahme, dass das Feature existieren muss - mit pip list --help
.
Es gibt aktuelle Kommentare, die darauf hinweisen, dass diese Funktion weder in der Dokumentation noch in den vorhandenen Antworten offensichtlich ist (obwohl dies von einigen angedeutet wird), daher dachte ich, ich sollte etwas posten. Ich hätte es vorgezogen, dies als Kommentar zu tun, aber ich habe nicht die Reputationspunkte.
pip freeze --local
8 Jahren hatten. pip list --local
ist auch verfügbar ... aber beachten Sie, dass es bei der OP-Frage nicht um virtuelle Umgebungen (die --local
unterstützt) geht, sondern darum, Distributionspakete von sudo pip install
Paketen zu unterscheiden.
Beachten Sie, dass bei mehreren auf Ihrem Computer installierten Python-Versionen möglicherweise einige Versionen von pip zugeordnet sind.
Abhängig von Ihren Assoziationen müssen Sie möglicherweise sehr vorsichtig sein, welchen Pip-Befehl Sie verwenden:
pip3 list
Arbeitete für mich, wo ich Python3.4 ausführe. Einfach mit hat pip list
den Fehler zurückgegeben The program 'pip' is currently not installed. You can install it by typing: sudo apt-get install python-pip
.
Wie @almenon hervorhob, funktioniert dies nicht mehr und es ist nicht die unterstützte Methode, um Paketinformationen in Ihrem Code abzurufen. Folgendes löst eine Ausnahme aus:
import pip
installed_packages = dict([(package.project_name, package.version)
for package in pip.get_installed_distributions()])
Um dies zu erreichen, können Sie importieren pkg_resources
. Hier ist ein Beispiel:
import pkg_resources
installed_packages = dict([(package.project_name, package.version)
for package in pkg_resources.working_set])
Ich bin dran v3.6.5
Hier ist der Einzeiler für Fedora oder andere RPM-Distributionen (basierend auf @ barraponto-Tipps):
find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'
Fügen Sie dies an den vorherigen Befehl an, um eine sauberere Ausgabe zu erhalten:
| sed -r 's:.*/(\w+)/__.*:\1:'
Holen Sie sich alle Datei- / Ordnernamen in site-packages/
(und dist-packages/
falls vorhanden) und entfernen Sie mit Ihrem Paketmanager diejenigen, die über das Paket installiert wurden.
pip freeze listet alle installierten Pakete auf, auch wenn dies nicht über pip / easy_install erfolgt. Auf CentOs / Redhat wird ein über rpm installiertes Paket gefunden.
Wenn Sie die Anaconda- Python-Distribution verwenden, können Sie mit dem conda list
Befehl sehen, was mit welcher Methode installiert wurde:
user@pc:~ $ conda list
# packages in environment at /anaconda3:
#
# Name Version Build Channel
_ipyw_jlab_nb_ext_conf 0.1.0 py36h2fc01ae_0
alabaster 0.7.10 py36h174008c_0
amqp 2.2.2 <pip>
anaconda 5.1.0 py36_2
anaconda-client 1.6.9 py36_0
So greifen Sie auf die von pip
(einschließlich möglicherweise pip
selbst) installierten Einträge zu :
user@pc:~ $ conda list | grep \<pip
amqp 2.2.2 <pip>
astroid 1.6.2 <pip>
billiard 3.5.0.3 <pip>
blinker 1.4 <pip>
ez-setup 0.9 <pip>
feedgenerator 1.9 <pip>
Natürlich möchten Sie wahrscheinlich nur die erste Spalte auswählen, mit der Sie arbeiten können (außer pip
bei Bedarf):
user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}'
amqp
astroid
billiard
blinker
ez-setup
feedgenerator
Schließlich können Sie diese Werte abrufen und alle mithilfe der folgenden Schritte deinstallieren:
user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}' | xargs pip uninstall -y
Beachten Sie die Verwendung des -y
Flags, um pip uninstall
zu vermeiden, dass zum Löschen eine Bestätigung gegeben werden muss.
Für diejenigen, die kein Pip installiert haben, habe ich dieses schnelle Skript auf Github gefunden (funktioniert mit Python 2.7.13):
import pkg_resources
distros = pkg_resources.AvailableDistributions()
for key in distros:
print distros[key]
Pip-Liste [Optionen] Die vollständige Referenz finden Sie hier
Zumindest für Ubuntu (vielleicht auch andere) funktioniert dies (inspiriert von einem vorherigen Beitrag in diesem Thread):
printf "Installed with pip:";
pip list 2>/dev/null | gawk '{print $1;}' | while read; do pip show "${REPLY}" 2>/dev/null | grep 'Location: /usr/local/lib/python2.7/dist-packages' >/dev/null; if (( $? == 0 )); then printf " ${REPLY}"; fi; done; echo