【问题标题】:How to resolve a "Can only install one of:" conflict?如何解决“只能安装以下之一:”冲突?
【发布时间】:2016-08-05 07:48:33
【问题描述】:

我已经通过 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]。

我知道是什么问题,但我不知道如何解决。

【问题讨论】:

  • 这是一个依赖冲突。请发布您的require 部分,以便其他人可以查看并建议一些更好的匹配版本约束。
  • @JensA.Koch 我认为这是一个糟糕的建议,因为虽然这可能会解决发帖者的问题,但到达此页面的其他搜索者将没有自己解决此问题的方法,除了在互联网上发布他们自己的require。换句话说,这不是一个通用的解决方案。

标签: composer-php


【解决方案1】:

只能安装一个 [x, y]”消息出现在两个不同的包指向相同的依赖项,但不同的主要、互斥版本只能安装一个时。 p>


疑难解答

例如,由于您的 composer.lock 文件中的信息可能与您尝试安装的内容冲突,一个版本可能会被“锁定在”。在这种情况下,当混淆错误带有“locked at 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 from the different folder时,选择n
  • 重试您的普通composer.json,在空文件夹上进行简化配置。
  • 运行composer diagnose 以检查任何常见错误。
  • 使用-v/-vv/-vvv 增加命令的详细程度。
  • 另见:How to explain Composer's error log?

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,我只需要运行

    composer update

    在安装新软件包之前。这将取决于其他已安装的软件包是否也更新了它们的依赖项。

    【讨论】:

    • 请注意,这会更新您 composer.json 文件中的所有依赖项,如果依赖项未正确固定,则可能会引入破坏性更改。
    【解决方案3】:

    我通过在版本号前添加一个“^”解决了这个问题。例如

    composer require drupal/slack:^1.2.0

    而不是

    composer require drupal/slack:1.2.0
    

    当后者导致此错误时。

    【讨论】:

      最近更新 更多