867 Stimmen

Python und pip, alle Versionen eines Pakets auflisten, das verfügbar ist?

Mit dem Namen eines Python-Pakets, das mit pip Gibt es eine Möglichkeit, eine Liste aller möglichen Versionen herauszufinden, die pip installieren kann? 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 möchte also irgendwie eine Liste aller Versionen haben, die pip kennt, damit ich sie testen kann.

6voto

Charlie Punkte 1540

Eine alternative Lösung ist die Verwendung der Warehouse-APIs:

https://warehouse.readthedocs.io/api-reference/json/#release

Zum Beispiel für Flask:

import requests
r = requests.get("https://pypi.org/pypi/Flask/json")
print(r.json()['releases'].keys())

wird gedruckt:

dict_keys(['0.1', '0.10', '0.10.1', '0.11', '0.11.1', '0.12', '0.12.1', '0.12.2', '0.12.3', '0.12.4', '0.2', '0.3', '0.3.1', '0.4', '0.5', '0.5.1', '0.5.2', '0.6', '0.6.1', '0.7', '0.7.1', '0.7.2', '0.8', '0.8.1', '0.9', '1.0', '1.0.1', '1.0.2'])

5voto

SebMa Punkte 3101

Hier ist meine Antwort, die die Liste nach innen sortiert jq (für diejenigen, die Systeme verwenden, bei denen sort -V ist nicht verfügbar) :

$ pythonPackage=certifi
$ curl -Ls https://pypi.org/pypi/$pythonPackage/json | jq -r '.releases | keys_unsorted | sort_by( split(".") | map(tonumber) )'
  ............. 
  "2019.3.9",
  "2019.6.16",
  "2019.9.11",
  "2019.11.28",
  "2020.4.5",
  "2020.4.5.1",
  "2020.4.5.2",
  "2020.6.20",
  "2020.11.8"
]

Und um die letzte Versionsnummer des Pakets abzurufen:

$ curl -Ls https://pypi.org/pypi/$pythonPackage/json | jq -r '.releases | keys_unsorted | sort_by( split(".") | map(tonumber) )[-1]'
2020.11.8

oder ein bisschen schneller:

$ curl -Ls https://pypi.org/pypi/$pythonPackage/json | jq -r '.releases | keys_unsorted | max_by( split(".") | map(tonumber) )'
2020.11.8

Oder noch einfacher :) :

$ curl -Ls https://pypi.org/pypi/$pythonPackage/json | jq -r .info.version
2020.11.8

4voto

Andrey Semakin Punkte 1397

Einfach bash Skript, das sich nur auf python selbst (ich gehe davon aus, dass es im Zusammenhang mit der Frage installiert werden sollte) und einer der curl o wget . Es wird davon ausgegangen, dass Sie setuptools Paket installiert, um Versionen zu sortieren (fast immer installiert). Es ist nicht auf externe Abhängigkeiten angewiesen, wie z.B.:

  • jq die möglicherweise nicht vorhanden sind;
  • grep y awk die sich unter Linux und macOS unterschiedlich verhalten können.

    curl --silent --location https://pypi.org/pypi/requests/json | python -c "import sys, json, pkg_resources; releases = json.load(sys.stdin)['releases']; print(' '.join(sorted(releases, key=pkg_resources.parse_version)))"

Eine etwas längere Version mit Kommentaren.

Geben Sie den Paketnamen in eine Variable ein:

PACKAGE=requests

Versionen abrufen (mit curl ):

VERSIONS=$(curl --silent --location https://pypi.org/pypi/$PACKAGE/json | python -c "import sys, json, pkg_resources; releases = json.load(sys.stdin)['releases']; print(' '.join(sorted(releases, key=pkg_resources.parse_version)))")

Versionen abrufen (mit wget ):

VERSIONS=$(wget -qO- https://pypi.org/pypi/$PACKAGE/json | python -c "import sys, json, pkg_resources; releases = json.load(sys.stdin)['releases']; print(' '.join(sorted(releases, key=pkg_resources.parse_version)))")

Sortierte Versionen drucken:

echo $VERSIONS

4voto

Michel de Ruiter Punkte 6109

Funktioniert mit aktuellen Pip-Versionen, keine zusätzlichen Tools erforderlich:

pip install pylibmc== -v 2>/dev/null | awk '/Found link/ {print $NF}' | uniq

2voto

Andrew Magee Punkte 6243

Ich hatte kein Glück mit yolk , yolk3k o pip install -v aber so endete ich mit dieser (angepasst an Python 3 von Eric Chiang's Antwort):

import json
import requests
from distutils.version import StrictVersion

def versions(package_name):
    url = "https://pypi.python.org/pypi/{}/json".format(package_name)
    data = requests.get(url).json()
    return sorted(list(data["releases"].keys()), key=StrictVersion, reverse=True)

>>> print("\n".join(versions("gunicorn")))
19.1.1
19.1.0
19.0.0
18.0
17.5
0.17.4
0.17.3
...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X