Composer依存関係のバージョンに相反する2つのパッケージ
-
21-12-2019 - |
質問
私はすでに geoip2 パッケージをインストールしました。私が少し前にそれをインストールするとき、それはGuzzle 3を必要としました。*それで、それはその依存関係の一つとして3.9.1をインストールしました。
preditonio パッケージをインストールしますので、composer.jsonに追加しました。
"require": {
...
...
"geoip2/geoip2": "0.6.*",
"predictionio/predictionio": "~0.7.1"
}
.
問題は Predictionio ガザース3.8.0または3.8.1を必要とします。すでにインストールされている3.9.1バージョンを受け入れます。
私は信じていますガザグサート 3.8.0は両方を満たすだろう geoip2 と predictionio 、その質問はどのようにダウングレードすることができますか Guzzle は、composer.json、composer.jon.lockだけです。
は、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].
. 解決
composer.json
にガタズを追加する必要はありません。あなたが新しいパッケージを追加するときにあなたがしなければならないのはあなたがガードを更新することです。(これはPredictionioの要件に合わせてダウングラードする)
を実行するだけです
composer update predictionio/predictionio guzzle/guzzle
.
わかるように、スペースでそれらを分離することによってcomposer update
に複数のパッケージを提供することができます。これはのドキュメント。
他のヒント
質問に関連するヒント:
composer update named/package
を実行することで、このパッケージを追加するだけで、またはバージョンが増加しているだけでなく、他には何もありません。 composer require named/package:~1.0
でも同じ(ただしのものの追加)が発生します(これはJSONフォーマットでめくることなくスタンドを追加するのがいい方法です)。
最新のものを更新するときの最も単純な解決策は、composer update
のみを実行することです。パッケージ名がないと、すべてのパッケージが更新される可能性があります。
~X.Y
をバージョンの説明として使用しようとすると思います。
ライブラリーを使用すると、十分な緩く定義されたバージョンの依存関係が可能になるはずです。例では、predictionio/predictionio
パッケージにはguzzle/guzzle:~3.8.0
が必要です。私はガップメンテナが互換性を築くことを疑問に思います。制限なしで互換性のある更新を可能にするためのライブラリーの依存関係を非常によく見たいと思っていきます。
はすべてのコストで分岐に依存しないでください。ブランチを使用するのが避けられない場合は、エイリアスバージョン番号を割り当てます.~3.8
以前のリリースから適切なバージョン番号を推測できない場合は、0.0.0で始まります。そのようにして、後でリリースされたバージョンに切り替えることができます。これは、バージョン番号の残りの部分に良く統合されます。
パッケージの特定のバージョンをインストールする場合は、のcomposer.jsonにこれを追加することができます。 section:
"guzzle/guzzle" : "3.8.0",
.
、その後
composer update guzzle/guzzle
.