如何解决参考 - 升级 PHP 后 Composer 错误“您的 PHP 版本不满足要求”
在将 PHP 从 7.4 更新到 8.0 后,我在现有项目上运行 composer update
,并得到如下错误:
- acme/some-package[1.0.0,...,1.4.0] 需要 php ^5.6.4 || ^7.0 -> 您的 php 版本 (8.0.3) 不满足该要求。
这是什么意思,我该如何解决?
(这是一个参考答案,旨在涵盖一个经常遇到的问题。场景只是一个例子。另见:“How to explain Composer's error log?”)
解决方法
问题
除了它们需要的其他包的版本之外,Composer 包还可以指定它们支持的 PHP 版本。
在解析要安装的软件包版本时,Composer 必须找到与所有约束条件匹配的版本:
- 您为
composer.json
中的依赖项指定的版本限制 - 每个包为其依赖项指定的版本约束
- 每个包支持的 PHP 版本
如果没有满足所有这些约束的包,你会得到一个错误。
常见的困惑
请注意,PHP 版本的版本约束遵循 the same rules as other composer constraints。因此,^7.0
的约束意味着“7.0 以上的任何 7.x 版本”,并且不包括 8.0。
解决方案
要解决该问题,您需要放宽其中一项约束:
- 查看错误消息中提到的包(示例中的
acme/some-package
)并在 Packagist(或您配置的任何自定义包源)上找到它。 - 查看是否存在支持您的 PHP 版本的更新版本。
- 如果没有,您需要找出添加该支持所需的内容。这可能意味着直接检查项目、运行其测试并提交补丁以将其标记为与新版本兼容。
- 如果(何时)添加了支持,您需要确保您的
composer.json
和您依赖的其他软件包不排除该新版本。例如,如果您当前依赖于acme/some-package
版本^1.0
,但 PHP 8.0 仅从 2.2.0 版本开始支持,您需要将约束更改为^2.2
,并使确保您的应用程序仍然兼容。
临时解决方法
有时,您非常确定您的应用程序可以在与您之前使用的相同版本的软件包中正常运行。在这种情况下,您可以在 composer.json
中使用 the platform
configuration variable 来假装您仍在使用旧版本。 这只能作为临时解决方法或用于测试,因为这意味着将安装可能在您的新 PHP 版本上完全损坏的软件包。
例如:
{
"config": {
"platform": {
"php": "7.4.999"
}
}
}
另见“Override PHP base dependency in composer”
,另外一个提示:如果您想检查如何在不运行 composer update
的情况下使您的项目兼容,Composer 提供了命令 why-not
。您不仅可以使用软件包及其版本运行它:composer why-not vendor/package 2.0
将列出阻止安装 vendor/package
v2.0 的所有其他软件包版本。
这也适用于 PHP 本身:composer why-not php 8.0
会告诉您哪些软件包会阻止使用更高版本的 PHP
Composer 2.0 is now available!
作为旁注,现在要求/删除和部分更新的速度要快得多,因为 Composer 只会加载正在更改的包的元数据。
我注意到一个没有提供链接的回复。
希望对你有帮助
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。