Frage

Das habe ich bereits geoip2 Paket installiert.Als ich es vor einiger Zeit installierte, benötigte es Guzzle 3.*, also installierte es Guzzle 3.9.1 als eine seiner Abhängigkeiten.

Jetzt möchte ich das installieren Vorhersage Paket, also habe ich es zu meiner Composer.json hinzugefügt

"require": {
    ...
    ...
    "geoip2/geoip2": "0.6.*",
    "predictionio/predictionio": "~0.7.1"
}

Das Problem ist Vorhersage erfordert guzzle 3.8.0 oder 3.8.1, die bereits installierte Version 3.9.1 wird nicht akzeptiert.

Ich glaube fressen 3.8.0 würde beides erfüllen geoip2 Und Vorhersage, Die Frage ist also, wie ich ein Downgrade durchführen kann fressen, im Gedächtnis behalten fressen erscheint nicht in meiner Composer.json, sondern nur in der Composer.lock.

Unten ist die Ausgabe, wenn ich laufe composer update predictionio/predictionio

  Problem 1
    - Installation request for predictionio/predictionio ~0.7.1 -> satisfiable by predictionio/predictionio[v0.7.1].
    - Conclusion: remove guzzle/guzzle v3.9.1
    - predictionio/predictionio v0.7.1 requires guzzle/guzzle ~3.8.0 -> satisfiable by guzzle/guzzle[v3.8.0, v3.8.1].
    - Can only install one of: guzzle/guzzle[v3.9.1, v3.8.0].
    - Can only install one of: guzzle/guzzle[v3.9.1, v3.8.1].
    - Installation request for guzzle/guzzle == 3.9.1.0 -> satisfiable by guzzle/guzzle[v3.9.1].
War es hilfreich?

Lösung

Sie müssen Guzzle nicht zu Ihrem hinzufügen composer.json.Sie müssen Guzzle lediglich aktualisieren, wenn Sie das neue Paket hinzufügen.(Dadurch wird Guzzle herabgestuft, um den Anforderungen von PredictionIO zu entsprechen.)

Einfach laufen

composer update predictionio/predictionio guzzle/guzzle

Wie Sie sehen, können Sie mehrere Pakete bereitstellen composer update indem Sie sie durch ein Leerzeichen trennen.Dies ist in beschrieben die Dokumentation.

Andere Tipps

Einige Hinweise zur Frage:

Durch Laufen composer update named/package, erlauben Sie nur, dass dieses Paket hinzugefügt oder seine Version erhöht wird, aber sonst nichts.Das Gleiche (aber nur das Hinzufügen von Dingen) wird mit passieren composer require named/package:~1.0 (Dies ist eine gute Möglichkeit, Dinge hinzuzufügen, ohne sich mit der JSON-Formatierung herumschlagen zu müssen.)

Die einfachste Lösung beim Aktualisieren von Dingen besteht darin, sie nur auszuführen composer update.Ohne einen Paketnamen können ALLE Pakete aktualisiert werden.

Alles zu aktualisieren könnte etwas riskant sein, wenn Sie bei der Auswahl Ihrer Softwarepakete nicht sorgfältig vorgehen.Persönlich empfehle ich die Verwendung von Software, die irgendwie semantische Versionierung zu verwenden scheint, was die Verwendung der Tilde-Versionsanforderung in Composer sehr gut ermöglicht.Ich würde sagen, dass jeder es versuchen sollte ~X.Y als Versionsbeschreibung, da damit sowohl Patches als auch kompatible Updates installiert werden können.

Die von Ihnen verwendeten Bibliotheken sollten genügend lose definierte Versionen IHRER Abhängigkeiten zulassen.In Ihrem Beispiel ist das predictionio/predictionio Paket erfordert guzzle/guzzle:~3.8.0 - Sie haben wahrscheinlich Gründe dafür, zwingen aber im Gegenzug jeden, der versucht, ihre Software zu verwenden, Guzzle 3.8.0 oder 3.8.1 zu verwenden.Ich bezweifle, dass die Guzzle-Betreuer die Abwärtskompatibilität unterbrechen werden, weil sie wissen, dass sie ein sehr wichtiges, grundlegendes Stück Software erstellen, von dem erwartet wird, dass es funktioniert, und ich denke, dass sie ziemlich bald Fehlerberichte erhalten werden, sollten sie dennoch Dinge kaputt machen.Ich würde sehr gerne die Abhängigkeiten jeder Bibliothek sehen, um kompatible Updates ohne Einschränkung zu ermöglichen, d. h.in diesem Fall ~3.8 wäre viel besser.

Vermeiden Sie unbedingt die Abhängigkeit von Filialen.Wenn die Verwendung eines Zweigs unumgänglich ist, weisen Sie ihm eine Alias-Versionsnummer zu: require: { "named/package": "dev-master as 1.2.2" } Wenn aus früheren Versionen keine richtige Versionsnummer erraten werden kann, beginnen Sie mit 0.0.0.So können Sie später auf eine freigegebene Version umsteigen, die sich besser in die restlichen Versionsnummern einfügt.

Wenn Sie eine bestimmte Version eines Pakets installieren möchten, können Sie diese einfach zu Ihrer Composer.json im hinzufügen erfordern Abschnitt:

    "guzzle/guzzle" : "3.8.0",

Und dann

  composer update guzzle/guzzle
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top