我通过Composer安装了一个软件包,它也因为这个软件包而安装了Guzzlehttp。之后,我尝试通过Composer安装另一个包,它也需要Guzzlehttp,Composer再次尝试安装它。
但我得到了错误:
问题1
只能安装其中一个:guzzlehttp://guzzle[6.2.0,6.0.2].
只能安装其中一个:guzzlehttp://guzzle[6.0.2,6.2.0]。
只能安装其中一个:guzzlehttp://guzzle[6.0.2,6.2.0]。
我知道问题出在哪里,但我不知道如何解决。
当两个不同的包指向相同的依赖项,但指向不同的主要互斥版本,其中只能安装一个时,会出现"只能安装一台[x,y]"消息。
故障排除
例如,由于composer.lock
文件中存在的信息可能与您尝试安装的内容相冲突,一个版本可能被"锁定在"。在这种情况下,当混淆错误伴随"锁定在x.y.z"消息时,您可以使用以下命令来了解已安装包的现有依赖关系:
composer show -t
注意:-t
显示为嵌套的树视图,将其拖放以查看平面列表
要查看有问题的包在项目中的引用位置,请运行:
composer why org/package -t
注意:-t
显示为嵌套的树视图,将其拖放以查看平面列表
要查看您尝试安装的软件包的详细信息,您可以运行:
composer show -a org/package # Package to inspect.
注意:要检查特定版本,请添加x.y.z
,例如:composer show -a guzzlehttp/guzzle 6.2.0
要进一步解决问题,根据您的情况,您可以尝试:
通过以下途径更新具有依赖关系的现有包:
composer update --with-dependencies
从
composer.json
升级或删除冲突的依赖项(保持简单)。- 当混淆消息显示"locked at x.y.z"时,请使用
composer why org/package
查看包的引用位置(或通过查找x.y.z
手动检查composer.lock
的内容)。如果没有帮助,请考虑删除composer.lock
,然后重试 - 当要求使用不同文件夹中的
composer.json
时,请选择n
- 在空文件夹上重新尝试简单的
composer.json
配置 - 运行
composer diagnose
以检查是否存在任何常见错误 - 使用
-v
/-vv
/-vvv
可以增加命令的详细程度 - 另请参阅:如何解释Composer';s的错误日志
我遇到了类似的问题,我只需要运行
composer update
安装新软件包之前。这将取决于其他安装的软件包是否也更新了它们的依赖关系。
我通过在版本号之前添加一个"^"来解决这个问题。例如
composer require drupal/slack:^1.2.0
而不是
composer require drupal/slack:1.2.0
当后者导致这个错误时。