我怎么才更新一个作曲家依赖?

时间:2013-10-03 00:00:00

标签: php composer-php

我期待

composer update videlalvaro/php-amqplib

只会更新一个依赖项,而不是更新所有依赖项。

我错过了什么?

PS:此依赖关系在"videlalvaro/php-amqplib": "2.2.0"

中定义为composer.json

PPS:使用的作曲家版本为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].

3 个答案:

答案 0 :(得分:37)

命令composer update videlalvaro/php-amqplib只会更新该依赖项。但是,它不会禁用Composer所做的其他依赖项检查。

错误消息抱怨的是您的系统上没有lib-icu。显然,这可以通过安装PHP Intl扩展来解决。

如果您在需要PHP 5.5的项目上进行了作曲家更新,降级到PHP 5.4,然后在单独的require上运行composer update,则不会需要PHP 5.5,您会看到类似的问题。即使你不会更新需要PHP 5.5的需求,该包的要求也无法解决,因此Composer会失败。

在您的情况下,即使您只是尝试将videlalvaro/php-amqplib更新为最新版本,也不会满足symfony/icu的要求,因此作曲家更新失败。

修改

为了尝试提供帮助,我猜你自上次更新后重新安装了PHP,并且已删除或忘记安装PHP Intl扩展。 Composer无法令人满意地满足你的composer.json设置的要求,因此默认为什么都不做,而不是故意做一个不满足要求的更新。

基本上,您需要安装现有已安装软件运行所需的PHP扩展,然后Composer将能够更新您要更新的单个软件包,并满足其他软件包的要求

答案 1 :(得分:18)

TL; DR:

您可以列出多个依赖关系,以便在一个命令中更新

composer update one/dependency second/dependency other/dependency

故事:

如果您只想更新一个依赖项(composer update some/dependency),则可能会遇到由于在错误版本中安装了某些其他依赖项而无法满足请求的问题。而且这个不一定必须列在你的composer.json中,它可能只是其他依赖的依赖。

E.g。我只想更新且仅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

那就是它!只需更新你想要的软件包,如果作曲家告诉你,你需要更新(或降级:-))其他软件包,请在命令中列出。

答案 2 :(得分:0)

出于安全原因,我在 GitHub 存储库上遇到了类似的情况。

我解决了将依赖更新到特定版本的问题,如下所示:

composer require phpseclib/phpseclib:2.0.31

如果您在运行之前使用 docker 容器(ddev、lando 等)等虚拟环境,您应该使用以下命令连接到容器:

ddev ssh