web-dev-qa-db-ja.com

1つのcomposer依存関係のみを更新するにはどうすればよいですか?

期待した

composer update videlalvaro/php-amqplib

1つの依存関係のみを更新しますが、その代わりにすべてを更新します。

私は何が欠けていますか?

PS:この依存関係は"videlalvaro/php-amqplib": "2.2.0" in composer.json

PPS:composer使用されているバージョンは3da05c68f9561fa822c522b1815435ff990493ff 2013-10-02 14:25:06

PPPS:実際の出力:

$ composer.phar update videlalvaro/php-amqplib --no-dev
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
    - symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
    - Installation request for symfony/icu == 1.2.0.0 -> satisfiable by symfony/icu[v1.2.0].
32
zerkms

コマンドcomposer update videlalvaro/php-amqplibは、その依存関係を更新するだけです。ただし、Composerが行う他の依存関係チェックは無効になりません。

エラーメッセージが訴えているのは、システムでlib-icuが利用できないことです。どうやらこれはPHP Intl拡張機能をインストールすることで解決されるようです。

composer 5.4にダウングレードされたPHP 5.5を必要とするプロジェクトでPHP更新を行った後、composer更新を実行すると、同様の問題が発生します。 PHP 5.5を必要としなかった別のrequire。 PHP 5.5を必要とする要件を更新しなくても、そのパッケージの要件は解決できないため、Composerは失敗します。

あなたの場合は、videlalvaro/php-amqplibを最新バージョンに更新しようとしているだけですが、symfony/icuの要件が満たされていないため、composerの更新は失敗します。

編集

役立つように、最後に更新を行ってからPHPを再インストールし、PHP Intl拡張機能を削除するか、インストールを忘れたと思います。 Composerは、composer.jsonが設定する要件を十分に満たすことができないため、要件が満たされていない場所で意図的に更新を行うのではなく、デフォルトで何もしないことになっています。

したがって、基本的に、既存のインストール済みソフトウェアを実行するために必要なPHP拡張機能をインストールする必要があります。その後、Composerは更新する単一のパッケージを更新し、他のパッケージの要件。

37
Danack

tl; dr:

複数更新する依存関係をリストできます1つのコマンドで

composer update one/dependency second/dependency other/dependency

ストーリー:

1つの依存関係(composer update some/dependency)のみを更新する場合、他の依存関係が間違ったバージョンにインストールされているために要求が満たされないという問題に直面する可能性があります。そして、それはあなたのcomposer.jsonに必ずしもリストされている必要はありません。他の依存関係の単なる依存関係である可能性があります。

例えば。更新したいのはgoogle/apiclientのみでしたが、composer update google/apiclientを呼び出すと、google/auth(apiclientの依存関係)にはguzzlehttp/psr7バージョン1.2.3が必要であると不満がありました。 1.3.0をインストールしました。 guzzlehttp/psr7は私のcomposer.jsonにリストされていません。私がしなければならなかったことは、電話することでした:

composer update guzzlehttp/psr7 google/apiclient

以上です!必要なパッケージを更新し、composer=が他のパッケージを更新(またはダウングレード:-))する必要があることを示している場合は、コマンドにリストします。

19
hejdav