如何解决“您的要求无法解决为一组可安装的软件包”错误?


83

我跑步时composer update会收到一些有线输出。

在此处输入图片说明

这是我的composer.json样子。

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.", "keywords": ["framework", "laravel"],
    "license": "MIT",
    "repositories": [{
        "type": "vcs",
        "url": "https://github.com/Zizaco/ardent.git"
    }],
    "require-dev": {
        "phpunit/phpunit": "4.3.*"
    },
    "require": {
        "laravel/framework": "4.2.*", 
        "laravelbook/ardent": "dev-master as 2.4.0", 
        "zizaco/entrust": "dev-master", 
        "sebklaus/profiler": "dev-master", 
        "doctrine/dbal": "dev-master"
    },
    "autoload": {
        "classmap": [
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations", "app/database/seeds", "app/tests",
            "app/libraries"
        ]
    },
    "scripts": {
        "post-install-cmd": [
            "php artisan clear-compiled", 
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "php artisan clear-compiled", 
            "php artisan optimize"
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ]
    },
    "config": {
        "preferred-install": "dist"
    },
    "minimum-stability": "stable"
}

我该如何解决?


8
嘿,请用composer.json的文本内容交换composer.json图像。这样可以再现问题并对该文件进行编辑以帮助您。谢谢。
延斯·科赫

2
@ JensA.Koch。我希望我能做到这一点。StackOverflow阻止我为像我这样的低信誉度人员发布大量代码。抱歉,我希望我没有那个限制。
cyber8200 2015年

3
嗯对 我的错,没有考虑您的观点。会投票赞成,所以您可以获得更多...
詹斯·科赫

Answers:


40

您的软件依赖项具有不兼容的版本冲突。

同时,您想从其主分支安装任何Laravel 4.2.x版本和“ zizaco / entrust”。而且该master分支至少需要Laravel 5.0(大致而言)。

问题来自对分支的依赖性。软件包zizaco / entrust可能曾经在其master分支中使用过Laravel 4.2,并且您当天可以安装依赖项。但是当此分支因版本要求不兼容而更新时,您将永远无法运行composer update并获取更新的依赖项。

始终使用带标签的版本!理想情况下,您使用宽松的版本要求,以允许兼容的更新。这应该表示为波浪号两个版本的要求:~1.2将安装1.2.0及更高版本(例如1.2.99或1.2.100)以及1.3及更高版本。如果您需要某个修补程序版本:插入号三号版本^1.2.10将安装1.2.10或更高版本,以及1.3或更高版本。

使用此版本要求代替,dev-master将允许您使用发行版本而不是master分支中的不稳定状态,并允许您解决仍可与Laravel 4.2一起使用的最新版本。我猜那应该是zizaco / entrust版本1.3.0,但是版本1.2也可以。一起去"zizaco/entrust": "~1.2"


7
这篇文章的主要答案是"zizaco/entrust": "~1.2"
cyber8200,2015年

了解错误消息的哪个部分使您认为Laravel 5.0所需,这将很有帮助zizaco/entrust
定量

好吧,如果我没记错的话,我正在查看提到的库,并在composer.json中看到了要求。我可能会解释我所看到的内容,因为它没有明确的要求,但其中包含一些组成部分。在错误消息中,您看到,这illuminate/support ^5.0是必需的zizaco/entrust,并且如果您知道“ Laravel”和“ Illuminate”基本上是同一回事,那么结论应该是正确的。
斯文


40

我正面临着同样的问题。我正在使用“ Lumen”微服务框架。我最近通过安装两个软件包解决了相同的问题:

  1. sudo apt-get install php7.0-mbstring
  2. sudo apt-get安装php7.0-xml或sudo apt-get安装php-xml

安装此命令后,您需要执行以下命令: -composer update

希望它将解决问题。我在系统上工作。


人们切勿在生产中使用作曲家更新,否则可能会引起问题。composer install是正确的安装命令。我投票给你,但我投票给我,因为1和2是正确的。
MarceloAgimóvel18年

在我的情况下,安装php-gd可以解决问题。即使打开了详细(-vvv)标志,Composer也未在故障输出中的任何地方提及此问题。
布拉德,

1
我正在使用Ubuntu 20.04。只有运行这个命令就足够了:sudo apt-get install php-xml
洛伊希

8

这些dev-master是自动添加的吗?避免将它们作为不必要的版本限制,以用于“任何合适的版本” "*",或者"@dev"如果您不介意开发包。我的猜测是,Entrust是潜在的麻烦制造者。

此外,还"minimum-stability": "stable"施加了其他约束,并且

"minimum-stability": "dev",
"prefer-stable": true

更无冲突,请以经验为准。


问题是不稳定的开发版本的使用。盲目允许他们(即使更喜欢稳定)是无法维持混乱的关键。

@Sven答案直接解决了问题,这是dev-master约束。它没有说明宽松的版本约束是好的-它们可能会导致混乱,这是开发人员的良心。答案不被认为是关于标签的事实,并不会导致错误。顺便说一句,我感谢你的反对。否决邻近的答案是很道德的。
Estus Flask

我同意根据要求提出的答案是正确的。它也为我工作。投票了!
tmarois

2

我解决了同样的问题,设置'laravel/framework'从依赖版本"^8.0""^7.0"

之后,运行composer update --ignore-platform-reqs就可以了

composer.json


到目前为止,最新的Laravel框架版本是7.10。那么您的依赖性如何上升到8.0?
Digvijay

不确定,因为我是Laravel的新手。这是一个全新的安装,其中包含composer.json文件
nicolasDevDes

1

在composer.json中"barryvdh/laravel-cors": "^0.7.3"require数组末尾添加

保存composer.json并运行 composer update

大功告成!


2
人们永远不要使用composer更新来安装依赖项。它应该使用composer安装。Composer更新将更新所有依赖关系,这可能是灾难性的。
MarceloAgimóvel18年

0

我在Laravel 5.8中遇到了这个问题,我要做的是composer require对每个库以及所有正确安装的库进行处理。

像这样:

而不是将其添加到composer.json文件或指定版本:

composer require msurguy/honeypot: dev-master

相反,我没有指定任何版本:

composer require msurguy/honeypot

希望对您有所帮助,谢谢


0
"config": {
  "platform": {
    "ext-pcntl": "7.2",
    "ext-posix": "7.2"
  }
}

0

我通过添加"zizaco/entrust": "*"而不是解决了相同的错误"zizaco/entrust": "~1.2"


-1

原因:

由于您的项目文件夹归root用户所有,因此发生了错误。

将所有权更改为当前登录的用户,而不是root用户。如果只有root用户作为唯一用户,请创建另一个具有root用户特权的用户。

$ sudo chown -R current_user / my / project / directory /

然后

$ composer安装


-7

只需激活php.ini文件中的curl

;extension=php_curl.dll

extension=php_curl.dll

然后安装作曲家


我不太确定激活php_curl.dll对于版本不匹配会做什么(Laravel 4.x与Laravel 5.x)。您能解释一下如何解决这个问题吗?
克里斯·福伦斯

我遇到了上述问题,所以我激活了卷发,问题得以解决。我相信作曲家或laravel使用此php扩展名来下载软件包。在我的情况下,它与laravel软件包并不完全不兼容,对于作曲者来说下载软件包是很困难的。
Gideao
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.