Gibt es angesichts des Namens eines Python-Pakets, das mit pip installiert werden kann , eine Möglichkeit, eine Liste aller möglichen Versionen davon herauszufinden, die pip installieren könnte? Im Moment ist es Versuch und Irrtum.
Ich versuche, eine Version für eine Bibliothek eines Drittanbieters zu installieren, aber die neueste Version ist zu neu. Es wurden rückwärts inkompatible Änderungen vorgenommen. Ich hätte gerne eine Liste aller Versionen, die pip kennt, damit ich sie testen kann.
pip install pylibmc==
ist perfekt.Antworten:
(Update: Ab März 2020 haben viele Leute berichtet, dass Eigelb, installiert über
pip install yolk3k
, nur die neueste Version zurückgibt. Chris 'Antwort scheint die meisten positiven Stimmen zu haben und hat für mich funktioniert.)Das Skript bei Pastebin funktioniert. Es ist jedoch nicht sehr praktisch, wenn Sie mit mehreren Umgebungen / Hosts arbeiten, da Sie es jedes Mal kopieren / erstellen müssen.
Eine bessere Allround-Lösung wäre die Verwendung von yolk3k , das für die Installation mit pip verfügbar ist. ZB um zu sehen, welche Versionen von Django verfügbar sind:
yolk3k
ist eine Gabelung des Originals,yolk
deren Entwicklung 2012 eingestellt wurde . Obwohlyolk
es nicht mehr gepflegt wird (wie in den Kommentaren unten angegeben),yolk3k
scheint es Python 3 zu sein und unterstützt es.Hinweis: Ich bin nicht an der Entwicklung von yolk3k beteiligt. Wenn etwas nicht so zu funktionieren scheint, wie es sollte, sollte es keinen großen Unterschied machen, hier einen Kommentar zu hinterlassen. Verwenden Sie stattdessen den yolk3k Issue Tracker und erwägen Sie, wenn möglich, einen Fix einzureichen.
quelle
Für pip> = 9.0 verwenden
- Alle verfügbaren Versionen werden gedruckt, ohne dass zusätzliche Pakete heruntergeladen oder installiert werden müssen.
Für pip <9.0 verwenden
Dabei
blork
kann es sich um eine beliebige Zeichenfolge handeln, die keine gültige Versionsnummer ist .quelle
pip install --only-binary :all: pylibmc
werden alle Versionen von pylibmc aufgelistet, die als Binärpakete verfügbar sind.pip install pylibmc==9999999 | tr ', ' "\n" | sort -n
Update:
Ab September 2017 funktioniert diese Methode nicht mehr:
--no-install
wurde in Pip 7 entferntVerwenden
pip install -v
Sie, um alle verfügbaren Versionen anzuzeigenVerwenden Sie eine der folgenden Lösungen, um kein Paket zu installieren:
oder
Getestet mit Pip 1.0
quelle
pip 1.5.4
GibtDEPRECATION: --no-install, --no-download, --build, and --no-clean are deprecated. See https://github.com/pypa/pip/issues/906.
verfügbare Versionen für bereits installierte Pakete an und zeigt sie nicht an.-v
. Der Rest meiner Antwort dient der Vermeidung von Additionseffekten (Installation / Download). Für installiertes Paket fügen Sie einfach --upgrade hinzu. Anw, Sie können eine separate virtuelle Umgebung erstellen, um alles einfacher zu machen.no such option: --no-install
Sie benötigen kein Paket eines Drittanbieters, um diese Informationen zu erhalten. pypi bietet einfache JSON-Feeds für alle Pakete unter
Hier ist etwas Python-Code, der nur die Standardbibliothek verwendet, die alle Versionen erhält.
Dieser Code wird gedruckt (Stand: 23. Februar 2015):
quelle
versions = [x for x in data["releases"] if any([y["python_version"] in ['cp26', '2.6'] for y in data["releases"][x]])]
Versionen gefunden, die mit Python 2.6 kompatibel sind. (Ich habecp26
nirgendwo gesehen, aber einige Pakete hatten,cp27
so dass ich spekuliere, dass dies in anderen Paketen existieren könnte.)curl -s https://pypi.python.org/pypi/{PKG_NAME}/json | jq -r '.releases | keys[]' | sort -t. -k 1,1n -k 2,2n -k 3,3n
ValueError
Ausnahme für einige Pakete aus, die nicht so strengen Versionsschemata folgen. Informationen zur Behebung dieser Pakete finden Sie in dieser Übersicht .Ich habe mir ein absolut einfaches Bash-Skript ausgedacht. Vielen Dank an den Autor von jq .
quelle
curl
Arbeit gehen, möglicherweise aufgrund von Zertifikatfehlern.wget --no-check-certificate
funktioniert, produziert aber auchcurl -k --insecure
nichts. Die Warnung, die ich mit bekomme,wget
sagtERROR: certificate common name `www.python.org´ doesn´t match requested host name `pypi.python.org´.
sort -V
funktioniert nicht unter OSX mit Homebrews Version vonjq
Sie könnten das yolk3k-Paket anstelle von yolk verwenden. yolk3k ist eine Gabel aus dem ursprünglichen Yolk und unterstützt sowohl Python2 als auch 3.
https://github.com/myint/yolk
quelle
yolk -V attest
Attest 0.5.3
Nachdem Sie sich eine Weile den Code von pip angesehen haben, sieht es so aus, als ob der Code, der für das Auffinden von Paketen verantwortlich ist, in der
PackageFinder
Klasse in zu finden istpip.index
. Die Methodefind_requirement
sucht nach den Versionen von aInstallRequirement
, gibt aber leider nur die neueste Version zurück.Der folgende Code ist fast eine 1: 1-Kopie der ursprünglichen Funktion, wobei die Rückgabe in Zeile 114 geändert wurde, um alle Versionen zurückzugeben.
Das Skript erwartet einen Paketnamen als erstes und einziges Argument und gibt alle Versionen zurück.
http://pastebin.com/axzdUQhZ
Ich kann die Richtigkeit nicht garantieren, da ich mit dem Code von pip nicht vertraut bin. Aber hoffentlich hilft das.
Beispielausgabe
Der Code:
quelle
Mit diesem kleinen Python 3-Skript (das nur Standardbibliotheksmodule verwendet) können Sie die Liste der verfügbaren Versionen für ein Paket von PyPI mithilfe der JSON-API abrufen und in umgekehrter chronologischer Reihenfolge drucken. Im Gegensatz zu einigen anderen hier veröffentlichten Python-Lösungen funktioniert dies nicht bei losen Versionen wie
django
's2.2rc1
oderuwsgi
' s2.0.17.1
:Speichern Sie das Skript und führen Sie es mit dem Paketnamen als Argument aus, z.
quelle
https://pypi.python.org/pypi/Django/ - funktioniert für Pakete, deren Betreuer alle Pakete anzeigen https://pypi.python.org/simple/pip/ - sollte den Trick trotzdem ausführen (listet alle Links auf)
quelle
Dies funktioniert für mich unter OSX:
Es gibt die Liste eine pro Zeile zurück:
Oder um die neueste Version zu erhalten:
Beachten Sie
gsort
, dass (unter OSX) installiert sein muss, um die Versionen zu analysieren. Sie können es mit installierenbrew install coreutils
quelle
Mein Projekt
luddite
hat diese Funktion.Anwendungsbeispiel:
Es listet alle verfügbaren Versionen eines Pakets auf, indem die json-API von https://pypi.org/ abgefragt wird.
quelle
requirements.txt
Dateien auf veraltete Pakete zu überprüfen . Es sind mehr als ein paar Codezeilen. Um einerequirements.txt
Datei zu überprüfen , benötigen Sie die Funktionalität, um alle Paketversionen aufzulisten. Dieser Teil ist absichtlich entkoppelt und Teil der öffentlichen API von luddite. Und es ist die Quelle Apache License 2.0. Ich denke, es ist nicht wirklich fair, das als "Black-Box" -Softwarepaket zu bezeichnen.Ich habe kein Glück mit
yolk
,yolk3k
oderpip install -v
aber so endete ich dies mit bis (angepasst auf Python 3 von eric Tschiangs Antwort):quelle
StrictVersion
nicht für viele Pakete arbeiten (django
,uwsgi
,psycopg2
um nur einige zu nennen). Sie könnenparse_version()
von verwendensetuptools
(siehe meine Antwort für ein Beispiel).Eine alternative Lösung besteht darin, die Warehouse-APIs zu verwenden:
https://warehouse.readthedocs.io/api-reference/json/#release
Zum Beispiel für Flask:
wird drucken:
quelle
Einfaches
bash
Skript, das sich nur auf sichpython
selbst stützt (ich gehe davon aus, dass es im Kontext der Frage installiert werden sollte) und eines voncurl
oderwget
. Es wird davon ausgegangen, dass Sie einsetuptools
Paket zum Sortieren von Versionen installiert haben (fast immer installiert). Es basiert nicht auf externen Abhängigkeiten wie:jq
die möglicherweise nicht vorhanden sind;grep
undawk
das kann sich unter Linux und MacOS unterschiedlich verhalten.Eine etwas längere Version mit Kommentaren.
Fügen Sie den Paketnamen in eine Variable ein:
Versionen abrufen (mit
curl
):Versionen abrufen (mit
wget
):Sortierte Versionen drucken:
quelle
Mein Ansatz ist eine Kombination aus einigen veröffentlichten Antworten mit einigen Änderungen, um die Verwendung in einer laufenden Python-Umgebung zu vereinfachen.
Die Idee ist, einen völlig neuen Befehl (nach dem Vorbild des Installationsbefehls) bereitzustellen, mit dem Sie eine Instanz des zu verwendenden Paketfinders erhalten. Der Vorteil ist, dass es mit allen Indizes funktioniert und diese verwendet, die pip unterstützt und Ihre lokalen Pip-Konfigurationsdateien liest, sodass Sie die richtigen Ergebnisse erhalten, wie Sie es bei einer normalen Pip-Installation tun würden.
Ich habe versucht, es mit pip v 9.x und 10.x kompatibel zu machen, habe es aber nur mit 9.x versucht
https://gist.github.com/kaos/68511bd013fcdebe766c981f50b473d4
Beispielausgabe
quelle