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

159
当我运行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"
}

我该如何修复这个问题?


请分享更多细节,比如以文本形式提供的错误信息,以及您尝试解决问题的方法。 - undefined
20个回答

314

6
使用这个有什么不利之处? - Adem Tepe
@AdemTepe,请查看此链接:https://hannesvdvreken.com/2015/01/18/composer-ignore-platform-reqs-flag/ - Gufran Hasan
21
需要解释。 - Chuck Le Butt
1
这些命令将安装并更新所有软件包,无论版本冲突。 - Lameck Meshack

61

您的软件依赖存在不兼容的版本冲突。

同时,您想安装任何Laravel 4.2.x版本和其主分支下的"zizaco/entrust"。而那个主分支需要至少Laravel 5.0(大致如此)。

问题来自于分支的依赖关系。很可能“zizaco/entrust”包曾经在其主分支中使用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将允许您使用发布的版本而不是主分支中的不稳定状态,并允许您使用与Laravel 4.2仍然兼容的最新版本。我想那可能是zizaco/entrust版本1.3.0,但版本1.2也符合要求。使用"zizaco/entrust": "~1.2"


知道错误信息的哪个部分让您认为 zizaco/entrust 需要 Laravel 5.0 将会很有帮助。 - quant
嗯,如果我没记错的话,我当时在看那个库,并查看了它的composer.json中的要求。我可能是在转述我所看到的内容,因为没有明确的要求,只有其中的一些组件。在错误信息中,你可以看到zizaco/entrust需要illuminate/support ^5.0,如果你知道"Laravel"和"Illuminate"基本上是同一件事,那么结论应该是正确的。 - Sven

44

我也遇到同样的问题。我正在使用'Lumen'微服务框架。 最近我通过安装两个软件包解决了这个问题:-

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

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

希望这能解决问题。 在我的系统上有效。


1
人们不应在生产环境中使用 composer update,这可能会引起问题。composer install 是正确的安装命令。我曾经给你点了踩,但现在我又点了赞,因为 1 和 2 都是正确的。 - Marcelo Agimóvel
1
在我的情况下,安装php-gd解决了问题。即使使用详细模式(-vvv)标志,Composer在失败输出中也没有提到这一点。 - Brad
2
我正在使用Ubuntu 20.04进行工作。只需运行以下命令即可: sudo apt-get install php-xml - Loich
您可能还需要安装curl,命令为sudo apt-get install php-curl - Redet Getachew

26

最简单的解决方法是添加 --ignore-platform-reqs 标志。

如果您正在运行 composer installcomposer update,请使用带有 --ignore-platform-reqs 标志。

示例

composer install --ignore-platform-reqs

或者

composer update --ignore-platform-reqs

这应该就行了!


17
我使用运行在Windows 10机器上的PHP 8Lavarel 8,遇到了相同的错误。我使用了以下命令:

composer update --ignore-platform-reqs

来更新所有包,而不考虑版本冲突。


9

这些dev-master是自动添加的吗?避免它们作为不必要的版本约束条件,使用"*"表示“任何合适的版本”,或者使用"@dev"表示您不介意开发包。我猜Entrust可能是麻烦制造者。

另外,"minimum-stability": "stable"会强加额外的约束条件,因此请注意。

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

如果想让IT技术相关内容更加冲突少,可以视作经验法则。

问题在于使用不稳定的开发版本。盲目地允许它们(即使更喜欢稳定版本)是导致难以维护的混乱关键。 - Sven
@Sven 这个答案直接解决了问题,即dev-master的限制。它并没有说松散版本约束是好的 - 它们可能会导致混乱,这是开发者的责任。答案对标记没有意见并不意味着它是错误的。顺便感谢你的投票,那很有道德,给邻居的答案投反对票。 - Estus Flask

7

我解决了同样的问题,只需要将 'laravel/framework' 依赖版本从 "^8.0" 改为 "^7.0"

之后运行 composer update --ignore-platform-reqs 就可以正常工作了。

composer.json


截至今天,最新的Laravel框架版本是7.10。那么你的依赖项是如何升级到8.0的? - Digvijay
说实话,我对Laravel还不是很熟悉。这是一个全新的安装,我在操作composer.json文件时出了点问题。 - nicolasDevDes

6
我在Laravel v8.49.0 (PHP v8.0.6)中遇到了同样的问题。通过使用Composer安装包,我最近解决了相同的问题:- composer create-project laravel/laravel myapp

your requirement could not be resolved

更新 Composer

composer update --ignore-platform-reqs

或者
composer install --ignore-platform-reqs

检查启动服务器
php artisan serve

enter image description here


服务器已启动并出现“未指定应用程序加密密钥”的错误,请查看此链接 https://dev59.com/x1cP5IYBdhLWcg3wH20Z#68219720 - Sarthak Raval
为了可访问性和其他原因,建议使用文本而不是图片(请参考此处的解释)。 - ggorlen

3

根据您系统上安装的PHP版本,安装以下内容:

sudo apt-get install php8.0-curl php8.0-gd php8.0-xsl php8.0-dom

最后再次尝试使用Composer创建Laravel项目

composer create-project laravel/laravel myProject

非常好。 - undefined

3

您必须在正确的目录中,因此请进入该目录:

cd xampp/htdocs/laravelProjects/laravelP1

如果您之前已安装了composer,请执行以下命令以更新:

composer update --ignore-platform-reqs

我的问题是错误的目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接