【问题标题】:Composer dependency conflictComposer 依赖冲突
【发布时间】:2015-12-03 04:00:21
【问题描述】:

运行这个composer require intervention/image 会抛出这个错误:

Using version ^2.3 for intervention/image
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

Problem 1
- Conclusion: don't install intervention/image 2.3.1
- Conclusion: don't install intervention/image 2.3.2
- Installation request for intervention/image ^2.3 -> satisfiable by intervention/image[2.3.0, 2.3.1, 2.3.2].
- intervention/image 2.3.0 requires guzzlehttp/psr7 ~1.1 -> satisfiable by guzzlehttp/psr7[1.1.0, 1.2.0].
- guzzlehttp/psr7 1.1.0 requires psr/http-message ~1.0 -> satisfiable by psr/http-message[1.0].
- guzzlehttp/psr7 1.2.0 requires psr/http-message ~1.0 -> satisfiable by psr/http-message[1.0].
- Conclusion: don't install psr/http-message 1.0


Installation failed, reverting ./composer.json to its original content.

所以它是由 Guzzle 引起的(我使用的是"guzzlehttp/guzzle": "~5.3")。但我不能(或不想)将 guzzle 更新到 6.0,因为它不向后兼容,所以我必须移动很多代码。我可以做点什么吗,比如把戏,还是我必须更新guzzlehttp/guzzleintervention/image

【问题讨论】:

  • 您的依赖项是否在您的主应用程序之上使用 Guzzle?如果他们指定了两个不同版本的 Guzzle,您可能会遇到此问题。

标签: php composer-php guzzle


【解决方案1】:

您可能会使用别名来欺骗 Composer,使其认为 guzzle 的 v5.3.0 实际上是 v6.0。

定义"guzzlehttp/guzzle": "~5.3 as 6.0" 将不起作用,因为那只是一个无效的字符串。您必须具体说明版本并插入 5.3.0,如下所示:

composer.json

{
    "require": {
        "intervention/image": "^2.3",
        "guzzlehttp/guzzle": "5.3.0 as 6.0"
    }
}

您还可以更新您的代码以使用guzzlehttp/guzzle v6,但这可能比在 composer.json 中更改几个字符更有效。 ,)


这是一个技巧,但不会奏效。你可以看看@Sven 的回答。

很明显,您没有测试我发布的内容。给版本起别名是完成它的一种方法。它不是解决所有依赖问题的圣杯。这是解决版本冲突的简单方法。

[50.2MB/9.02s]   - Installing react/promise (v2.2.1)
[50.6MB/9.07s] Reading C:/Users/koch/AppData/Local/Composer/files/react/promise/3b6fca09c7d56321057fa8867c8dbe1abf648627.zip from cache
[50.6MB/9.08s]     Loading from cache
[50.6MB/9.08s]     Extracting archive
[50.7MB/9.47s]
[50.7MB/9.48s]     REASON: guzzlehttp/ringphp 1.1.0 requires react/promise ~2.0 -> satisfiable by react/promise[v2.0.0, v2.1.0, v2.2.0, v2.2.1].
[50.7MB/9.48s]
[50.7MB/9.49s]   - Installing guzzlehttp/streams (3.0.0)
[50.7MB/9.53s] Reading C:/Users/koch/AppData/Local/Composer/files/guzzlehttp/streams/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5.zip from cache
[50.7MB/9.54s]     Loading from cache
[50.7MB/9.54s]     Extracting archive
[50.7MB/9.92s]
[50.7MB/9.93s]     REASON: guzzlehttp/ringphp 1.1.0 requires guzzlehttp/streams ~3.0 -> satisfiable by guzzlehttp/streams[3.0.0].
[50.7MB/9.93s]
[50.7MB/9.94s]   - Installing guzzlehttp/ringphp (1.1.0)
[50.7MB/10.01s] Reading C:/Users/koch/AppData/Local/Composer/files/guzzlehttp/ringphp/dbbb91d7f6c191e5e405e900e3102ac7f261bc0b.zip from cache
[50.7MB/10.02s]     Loading from cache
[50.7MB/10.02s]     Extracting archive
[50.7MB/10.41s]
[50.7MB/10.41s]     REASON: guzzlehttp/guzzle 5.3.0 requires guzzlehttp/ringphp ^1.1 -> satisfiable by guzzlehttp/ringphp[1.1.0].
[50.7MB/10.41s]
[50.7MB/10.43s]   - Installing guzzlehttp/guzzle (5.3.0)
[50.7MB/10.49s] Reading C:/Users/koch/AppData/Local/Composer/files/guzzlehttp/guzzle/f3c8c22471cb55475105c14769644a49c3262b93.zip from cache
[50.7MB/10.51s]     Loading from cache
[50.7MB/10.51s]     Extracting archive
[50.7MB/11.66s]
[50.7MB/11.66s]     REASON: Required by root: Install command rule (install guzzlehttp/guzzle 5.3.0)
[50.7MB/11.66s]
[50.7MB/11.69s]   - Installing psr/http-message (1.0)
[50.7MB/11.77s] Reading C:/Users/koch/AppData/Local/Composer/files/psr/http-message/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298.zip from cache
[50.7MB/11.78s]     Loading from cache
[50.7MB/11.78s]     Extracting archive
[50.7MB/11.91s]
[50.7MB/11.91s]     REASON: guzzlehttp/psr7 1.2.0 requires psr/http-message ~1.0 -> satisfiable by psr/http-message[1.0].
[50.7MB/11.91s]
[50.7MB/11.94s]   - Installing guzzlehttp/psr7 (1.2.0)
[50.7MB/11.98s] Reading C:/Users/koch/AppData/Local/Composer/files/guzzlehttp/psr7/4ef919b0cf3b1989523138b60163bbcb7ba1ff7e.zip from cache
[50.7MB/11.98s]     Loading from cache
[50.7MB/11.98s]     Extracting archive
[50.7MB/12.61s]
[50.7MB/12.61s]     REASON: intervention/image 2.3.2 requires guzzlehttp/psr7 ~1.1 -> satisfiable by guzzlehttp/psr7[1.1.0, 1.2.0].
[50.7MB/12.61s]
[50.7MB/12.64s]   - Installing intervention/image (2.3.2)
[50.7MB/12.73s] Reading C:/Users/koch/AppData/Local/Composer/files/intervention/image/1124ff3c6298f0dcf9edf9156623904d7a5c3428.zip from cache
[50.7MB/12.74s]     Loading from cache
[50.7MB/12.74s]     Extracting archive
[50.7MB/14.72s]
[50.7MB/14.72s]     REASON: Required by root: Install command rule (install intervention/image 2.3.0|install intervention/image 2.3.1|install intervention/image 2.3.2)
[50.7MB/14.72s]
[50.3MB/15.09s] intervention/image suggests installing ext-gd (to use GD library based image processing.)
[50.3MB/15.10s] intervention/image suggests installing ext-imagick (to use Imagick based image processing.)
[50.3MB/15.11s] intervention/image suggests installing intervention/imagecache (Caching extension for the Intervention Image library)
[50.4MB/15.17s] Writing lock file

【讨论】:

  • 这是一个技巧,但它不起作用。你可以看看@Sven 的回答
  • 看来你没有测试它:) 让我们把这个 composer.json 建立在事实的基础上......我添加了安装日志。无论如何..很高兴你解决了这个问题:)
  • 你是对的:),我没有测试。现在我刚刚测试过,同样的问题,它不起作用。也许在一个新项目上,但是使用 composer update 我得到了完全相同的错误和相同的文本(我刚刚复制/粘贴了你的代码并运行了 composer update)。你做了别的事吗? (或者可能有我不明白的地方)
  • 我无法重现您的问题。我使用了composer clearcache,然后是composer install -vvv --profile,上面的作曲家sn-p。它解析并安装所有包。
【解决方案2】:

使用别名方法有一个严重的缺点:行不通!

我怀疑您对 Guzzle 5 的使用是您发送消息的原因,但为了进行更多调查,我需要您的 composer.json 的内容,并且可能还需要您的 composer.lock 文件的内容。

这里添加的依赖并不太复杂。 intervention/image 依赖于guzzlehttp/psr7 ~1.1,后者依赖于psr/http-message ~1.0。 Guzzle 包是一个全新的包,之前版本的 Guzzle 5.x 没有使用过,而且 PSR 包也不应该与任何东西冲突——但这正是 Composer 检测到的。但是,在 Composer 中解密 SAT 求解器的错误消息并不容易。求解器可以轻松地为您创建一个适用于所有要求的解决方案,但查明故障非常困难。如果可能的话,Composer 会为你做这件事。

有一个工具可以帮助人类调试这种情况:https://packagist.org/packages/clue/graph-composer

它是一个命令行工具,最好用composer global require clue/graph-composer安装,它还需要安装“graphviz”。在您现有的项目中使用它会显示当前存在的所有包依赖项,并且可能会为您提供可能出现问题的线索。

【讨论】:

  • 谢谢!这个回应真的很有帮助,它清晰而准确。无论如何,我切换到了以前版本的干预/图像,在我的项目中拥有最新版本并不重要。非常感谢!
  • @Sven 感谢您指出“线索/图表作曲家”。它是可视化 Composer 依赖项的好工具。你知道有哪些工具可以做同样的事情,但没有严重的“graphviz”依赖吗?
  • 我认为目前没有任何产品能够像 Graphviz 那样绘制图形——至少在开源领域是这样。很多关于如何绘制东西的知识都进入了那个软件,所以要替换它可能并不容易。另一方面,在多个平台(即 Linux 和 Windows)上安装它并使其可用于 graph-composer 包时,我没有遇到严重问题。
  • 安装graph-composer或者graphviz的时候如果出现依赖冲突不是很好笑吗?...
【解决方案3】:

是的。您可以尝试使用aliases。 可能是这样的:

"guzzlehttp/guzzle": "~5.3 as 6.0"

【讨论】:

  • 这是一个技巧,但它不起作用。你可以看看@Sven 的回答
猜你喜欢
  • 2020-09-03
  • 2014-09-23
  • 1970-01-01
  • 2011-03-12
  • 2019-12-24
  • 2021-12-14
  • 2022-01-24
  • 2021-12-03
相关资源
最近更新 更多