web-dev-qa-db-fra.com

Comment pourrais-je mettre à jour une seule dépendance composer?

Je m'attendais à ce que

composer update videlalvaro/php-amqplib

ne mettrait à jour qu'une seule dépendance, mais au lieu de cela, il met à jour tout.

Qu'est-ce que je rate?

PS: cette dépendance est définie comme "videlalvaro/php-amqplib": "2.2.0" dans composer.json

PPS: la version composer utilisée est 3da05c68f9561fa822c522b1815435ff990493ff 2013-10-02 14:25:06

PPPS: la sortie réelle:

$ 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

La commande composer update videlalvaro/php-amqplib ne fait que mettre à jour cette dépendance. Cependant, il ne désactive pas les autres vérifications de dépendance que fait Composer.

Le message d'erreur se plaint que la lib-icu n'est pas disponible sur votre système. Apparemment, cela serait résolu en installant l'extension PHP Intl.

Vous verriez des problèmes similaires si vous faisiez une mise à jour composer sur un projet qui nécessitait PHP 5.5 dans l'un de ses besoins, rétrogradé à PHP 5.4 puis a exécuté composer mise à jour sur une demande distincte, qui ne nécessitait pas PHP 5.5. Même si vous ne mettriez pas à jour le nécessite que PHP 5.5, les exigences de ce package ne soient pas résolvables, et donc Composer échouerait).

Dans votre cas, même si vous essayez simplement de mettre à jour videlalvaro/php-amqplib vers la dernière version, la configuration requise pour symfony/icu ne sont pas remplies, et donc la mise à jour composer échoue.

Modifier

Pour essayer d'être utile, je suppose que vous avez réinstallé PHP depuis la dernière mise à jour, et que vous avez supprimé ou oublié d'installer le PHP Intl extension. Composer ne peut pas satisfaire de manière satisfaisante les exigences que votre composer.json définit, et il en va de même par défaut de ne rien faire, plutôt que de faire sciemment une mise à jour là où les exigences ne sont pas remplies.

Donc, fondamentalement, vous devez installer les extensions PHP requises pour que votre logiciel installé existant s'exécute, puis Composer pourra mettre à jour le package unique). que vous souhaitez mettre à jour, ainsi que répondre aux exigences des autres packages.

37
Danack

tl; dr:

Vous pouvez lister plus d'une dépendance à mettre à jour dans une commande:

composer update one/dependency second/dependency other/dependency

Récit:

Si vous souhaitez mettre à jour une seule dépendance (composer update some/dependency), vous pouvez rencontrer un problème qui ne satisfait pas la demande car une autre dépendance est installée dans une mauvaise version. Et celui-là ne doit pas nécessairement être répertorié dans votre composer.json, cela pourrait être simplement la dépendance d'une autre dépendance.

Par exemple. Je voulais seulement mettre à jour et seulement google/apiclient, mais en appelant composer update google/apiclient s'est plaint que google/auth (dépendance de l'apiclient) nécessite guzzlehttp/psr7 dans la version 1.2.3. J'ai eu 1.3.0 installée. Le guzzlehttp/psr7 n'était pas répertorié dans mon composer.json. Ce que je devais faire, c'était d'appeler:

composer update guzzlehttp/psr7 google/apiclient

et c'est tout! Mettez simplement à jour le paquet que vous voulez, et si composer vous dit que vous devez mettre à jour (ou rétrograder :-)) un autre paquet, listez-le dans la commande.

19
hejdav