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

时间:2021-03-21 16:19:23

标签: php laravel symfony composer-php php-8

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

由于 PHP 8 相对较新,仍然有很多第三方包依赖旧版本的 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].

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-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"
       }
    }
}

只有在您确定它不会引起任何问题时才使用它。