46

我期望

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].
4

4 回答 4

49

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

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

如果您在其中一个要求中需要 PHP 5.5 的项目执行 composer update,降级到 PHP 5.4,然后在不需要 PHP 5.5 的单独要求上运行 composer update,您会看到类似的问题。即使您不会更新需要 PHP 5.5 的需求,该包的需求也无法解析,因此 Composer 会失败。

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

编辑

为了提供帮助,我猜您在上次更新后重新安装了 PHP,并且删除或忘记安装 PHP Intl 扩展。Composer 无法令人满意地满足您的 composer.json 设置的要求,因此默认不做任何事情,而不是故意在不满足要求的情况下进行更新。

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

于 2013-10-03T02:38:18.953 回答
33

tl;博士:

您可以在一个命令中列出多个要更新的依赖项:

composer update one/dependency second/dependency other/dependency

故事:

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

例如,我想更新 only 并且 only google/apiclient,但打电话composer update google/apiclient抱怨,google/auth(apiclient 的依赖)需要guzzlehttp/psr7在 version 中1.2.3。我已经1.3.0安装了。未guzzlehttp/psr7在我的composer.json. 我必须做的是打电话:

composer update guzzlehttp/psr7 google/apiclient

就是这样!只需更新您想要的包,如果 composer 告诉您,您需要更新(或降级:-))其他包,请在命令中列出它。

于 2016-06-14T06:11:26.177 回答
0

要在更新特定包期间克服这种依赖问题,您应该在完全运行更新之前指定所有特定包版本。
在你的情况下是这样的:

composer require videlalvaro/php-amqplib:2.2.0 --no-update
composer require symfony/icu:1.2.0 --no-update
composer require lib-icu:4.4 --no-update

composer update videlalvaro/php-amqplib symfony/icu lib-icu
于 2021-10-04T08:33:50.543 回答
0

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

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

composer require phpseclib/phpseclib:2.0.31

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

ddev ssh
于 2021-05-06T06:39:02.270 回答