Wie installiere ich ein Paket mit minimalem und maximalem Versionsbereich?

Lesezeit: 4 Minuten

Benutzer-Avatar
Coredump-Fehler

Ich frage mich, ob es eine Möglichkeit gibt, Pip anzuweisen, insbesondere in einer Anforderungsdatei, ein Paket mit einer Mindestversion (pip install package>=0.2) und eine maximale Version, die niemals installiert werden sollte (theoretische API: pip install package<0.3).

Ich frage, weil ich eine Bibliothek eines Drittanbieters verwende, die sich in der aktiven Entwicklung befindet. Ich möchte, dass meine Pip-Anforderungsdatei angibt, dass immer die neueste Nebenversion des 0.5.x-Zweigs installiert werden soll, aber ich möchte nicht, dass Pip seitdem jemals versucht, neuere Hauptversionen (wie 0.6.x) zu installieren Die API ist anders. Das ist wichtig, denn obwohl der 0.6.x-Zweig verfügbar ist, veröffentlichen die Entwickler immer noch Patches und Bugfixes für den 0.5.x-Zweig, also möchte ich keinen statischen verwenden package==0.5.9 Zeile in meiner Anforderungsdatei.

Gibt es eine Möglichkeit, das zu tun?

Benutzer-Avatar
Hugo Tavares

Du kannst tun:

$ pip install "package>=0.2,<0.3"

Und pip wird nach der besten Übereinstimmung suchen, vorausgesetzt, die Version ist mindestens 0.2 und kleiner als 0.3.

Dies gilt auch für Pip Anforderungsdateien. Die vollständigen Details zu Versionsbezeichnern finden Sie in PEP 440.

  • Fürs Protokoll, denke ich "package>=0.2,<=0.3" macht nicht viel Sinn: Wann würden Sie sowohl mit 0.2 als auch mit 0.3.0 einverstanden sein, aber nicht mit einem der Bugfix-Releases von 0.3? Ich finde "package>=0.2,<0.3" ist ein viel besseres Beispiel, weil es den üblichen Fall widerspiegelt: “Bitte geben Sie mir das neueste Bugfix-Release der aktuellen Minor-Version, aber aktualisieren Sie mich nicht automatisch auf die nächste Minor-Version, weil ich das ausdrücklich tun möchte , um sicherzustellen, dass es keine funktionellen Änderungen gibt, die mich betreffen.”

    – Henrik Heimbürger

    29. Mai 2014 um 10:19 Uhr


  • Wenn Ihnen diese Antwort gefällt, werden Sie die Antwort von Mortiz unten lieben! Unbedingt anschauen, ~=0.2 ist (imho) eine bessere Lösung als diese.

    – Brad Wurzel

    22. April 2019 um 17:24 Uhr

  • @BradRoot Es ist wirklich unklar, was ~=0.2.1 würde es zum Beispiel tun. Explizit sein wie in >=0.2,<0.3 ist eine gute Sache, weil es wirklich klar ist, was passiert.

    – Asklepios

    1. November 2019 um 16:06 Uhr


  • @Acumenus Jemand, der die Eigenschaften des Anforderungsformats und die Funktionsweise der Versionierung versteht, würde nicht schreiben ~=0.2.1 in einer Anforderungsdatei. Das ist ein Benutzerfehler, kein Nachteil der ~= Präfix.

    – Brad Wurzel

    7. November 2019 um 18:15 Uhr

  • @BradRoot Würde nicht ~=0.2.1 bedeuten >=0.2.1,<0.3? Wie ist es ein Benutzerfehler?

    – Asklepios

    7. November 2019 um 21:27 Uhr

Sie können auch verwenden:

pip install package==0.5.*

was konsistenter und leichter zu lesen ist.

  • Dies ist ein viel besserer Weg, um zu verwalten requirements.txt Meiner Meinung nach. Verwenden package==1.* Anstatt von package>=1.2 verhindert, dass pip die Hauptversion 2+ für das Paket installiert, was wünschenswert ist, da Änderungen an Hauptversionen oft rückwärtsinkompatibel sind.

    – Michael Heus

    18. Januar 2018 um 18:41 Uhr


  • Hinweis: Dies aktualisiert kein vorhandenes Paket. zB wenn Sie 0.5.1 installiert haben, aber 0.5.2 die neueste Version ist und Sie install 0.5.* ausführen, wird es “bereits zufrieden” sagen und Sie mit 0.5.1 belassen. Das Hinzufügen von –upgrade löst es.

    – Scipilot

    6. April 2018 um 8:05 Uhr


  • Das funktioniert bei mir nicht pip install matplotlib==3.2.* zsh: no matches found: matplotlib==3.2.*

    – tbrodbeck

    16. Juni 2021 um 6:32 Uhr


  • @Tillus das Sternzeichen wird um zsh erweitert (genau wie beim Ausführen rm myfiles*. Sie müssen das Argument maskieren, zB mit einfachen Anführungszeichen pip install 'matplotlib==3.2.*'.

    – Adir

    1. Juli 2021 um 8:52 Uhr

Eine elegante Methode wäre die Verwendung von ~= kompatibler Release-Operator gem PEP 440. In Ihrem Fall würde dies bedeuten:

package~=0.5.0

Wenn beispielsweise die folgenden Versionen vorhanden sind, würde es auswählen 0.5.9:

  • 0.5.0
  • 0.5.9
  • 0.6.0

Zur Verdeutlichung ist jedes Paar äquivalent:

~= 0.5.0
>= 0.5.0, == 0.5.*

~= 0.5
>= 0.5, == 0.*

  • @Mike’Pomax’Kamermans Sie sollten verwenden ~=2.2.0 In diesem Fall(* Operator funktioniert nicht, wenn Sie verwenden ~=). 2.2 und 2.2.0 (und 2.2.0.0usw.) werden intern gleich behandelt, wenn es um die Installation von Paketen geht.

    – ik1ne

    23. Mai 2019 um 8:15 Uhr


  • Es ist äußerst unklar, wie dies für verschachtelte Versionsnummern funktioniert, z ~=1.2.3. Es ist viel expliziter und klarer, stattdessen die Form mit mehreren Klauseln zu verwenden.

    – Asklepios

    1. November 2019 um 16:05 Uhr


  • @MitchMcMabers Das funktioniert nur, wenn die gewünschten Funktionen in der ersten Version dieser Hauptversion vorhanden waren, was im Allgemeinen nicht zutrifft. Wenn Sie sich beispielsweise auf etwas verlassen, das in v1.2.0 hinzugefügt wurde, == 1.* wird v1.1.0 nicht ordnungsgemäß akzeptieren. Das ~= (oder >= Plus < wenn Sie das schwer zu lesen finden) Operator ist besser, weil es dazu anregt, richtig spezifisch zu sein.

    – Maxpm

    15. Februar 2020 um 1:56 Uhr

  • @Maxpm Das ist ein guter Punkt. So == 1.* würde fehlschlagen und nichts tun, wenn wir ein Feature der Version 1.2 benötigen, der Benutzer jedoch bereits 1.1 installiert hat. Ihr Vorschlag ~= 1.2 ist dasselbe wie zu sagen >= 1.2, < 2.0 (oder >= 1.2, == 1.*). Also ja, du hast recht, ~= ist der beste Operator, da Sie damit auf die von Ihnen verwendete Entwicklungsversion einer Bibliothek abzielen können, während neuere Versionen innerhalb der gleich Hauptversion. Danke für diese Klarstellung!

    – Mitch McMabers

    17. Februar 2020 um 18:44 Uhr


  • Das kommt mir wirklich merkwürdig vor numpy~=1.17.0 lädt 1.17.5 herunter, aber numpy~=1.17 Herunterladen 1.18.5.

    – nichts101

    15. Juni 2020 um 5:50 Uhr

nok.github.io/pipdev ist ein interaktives Werkzeug für Entwickler, um definierte Spezifizierer für die Versionsverwaltung zu testen.

Geben Sie hier die Bildbeschreibung ein

Bezogen auf die Frage: nok.github.io/pipdev?spec=~=0.5.0&vers=0.6

1090350cookie-checkWie installiere ich ein Paket mit minimalem und maximalem Versionsbereich?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy