Composer 依赖冲突

rap*_*2-h 5 php composer-php guzzle

运行此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.
Run Code Online (Sandbox Code Playgroud)

所以这是由 Guzzle 引起的(我正在使用"guzzlehttp/guzzle": "~5.3")。但我不能(或不想)将 guzzle 更新到 6.0,因为它不向后兼容,所以我必须移动大量代码。我可以做点什么,比如一个技巧,或者我必须更新guzzlehttp/guzzleintervention/image

Sve*_*ven 5

使用别名方法有一个严重的缺点:它不起作用!

我怀疑您对 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”。在现有项目上使用它将显示当前存在的所有包依赖项,并可能为您提供可能出现问题的线索。

  • 如果安装 graph-composer 或 graphviz 时出现依赖冲突,那不是很搞笑吗?... (2认同)