作曲家安装和更新问题(需要 php ^7.0 ->您的 php 版本 (8.0.3))



我们开始在新项目中使用PHP8。但我们也在将旧项目迁移到新的PHP8。安装依赖项时会出现问题。

由于PHP8相对较新,仍有许多第三方软件包依赖于旧版本的PHP(主要是由于配置过时(。

我的PHP版本:

martin@empire:~$ php -v
PHP 8.0.3 (cli) (built: Mar  5 2021 07:54:13) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.3, Copyright (c) Zend Technologies
with Zend OPcache v8.0.3, Copyright (c), by Zend Technologies

Symfony项目composer install示例:

martin@empire:~/projects/twig-example$ composer install
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Your lock file does not contain a compatible set of packages. Please run composer update.
Problem 1
- twig/twig is locked to version v2.3.0 and an update of this package was not requested.
- twig/twig v2.3.0 requires php ^7.0 -> your php version (8.0.3) does not satisfy that requirement.
Problem 2
- twig/twig v2.3.0 requires php ^7.0 -> your php version (8.0.3) does not satisfy that requirement.
...

Laravel 8项目的示例composer update

martin@empire:~/projects/collabquest-api$ composer update
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- jwilsson/spotify-web-api-php[3.6.0, ..., 3.6.2] require php ^7.0 -> your php version (8.0.3) does not satisfy that requirement.
- Root composer.json requires jwilsson/spotify-web-api-php ^3.6 -> satisfiable by jwilsson/spotify-web-api-php[3.6.0, 3.6.1, 3.6.2].

处理这个问题和解决这个依赖性问题的最佳方法是什么?

更新:

最终解决方案

使用已准备好PHP 8的更新包。大多数包裹都是最新的。

如果有些人明确要求使用较低版本的PHP,请找到替代品。或者分叉并更新。

您可以使用以下作为临时解决方案:

临时快速解决方案

Composer有以下可能性:

--ignore-platform-req=IGNORE-PLATFORM-REQ        Ignore a specific platform requirement (php & ext- packages). (multiple values allowed)
--ignore-platform-reqs                           Ignore all platform requirements (php & ext- packages).

用法:

# for composer install
composer --ignore-platform-req=php install
# for composer update
composer --ignore-platform-req=php update
# also works for require etc.

大多数软件包使用的PHP版本为7.x.x或更低,与版本8向后兼容。因此,不应该出现任何问题。

更新:也有可能直接在composer.json中强制版本。然而,这个选项对我们不可用,因为我们已经在代码中使用了php版本8的特殊语法和功能。即便如此,我们已经存在版本冲突,无论是将PHP的第7版还是第8版强制应用到项目中。

composer.json:中强制版本的示例

{
"config": {
"platform": {
"php": "7.0.0"
}
}
}

只有当你确信它不会引起任何问题时,才能使用它。

降级php版本,直到依赖它的包进行更新,您必须将其替换为另一个,我也有同样的问题,我使用了第一个解决方案。

最新更新