如何解决"只能安装以下之一:"冲突?

时间:2016-04-13 23:57:33

标签: composer-php

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

  •   

我知道问题是什么,但我不知道如何修复它。

3 个答案:

答案 0 :(得分:6)

" 只能安装一个[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升级或删除有冲突的依赖关系(保持简单)。

  • 当混淆消息显示" 已锁定在xyz "时,请使用composer why org/package查看引用包的位置(或检查{{1}的内容通过查找composer.lock手动}。如果没有帮助,请考虑删除x.y.z并重新尝试;
  • 当系统要求您使用composer.json from the different folder时,请选择composer.lock
  • 在空文件夹上重新尝试简单的n简化配置。
  • 运行composer.json以检查是否存在任何常见错误。
  • 使用composer diagnose / -v / -vv来增加命令的详细程度。
  • 另请参阅:How to explain Composer's error log?

答案 1 :(得分:3)

我有类似的问题,我只需要运行

composer update

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

答案 2 :(得分:0)

我通过在版本号之前添加“ ^”来解决此问题。例如

composer require drupal/slack:^1.2.0

代替

composer require drupal/slack:1.2.0

当后者导致此错误时。