【问题标题】:Composer install & update issue (requires php ^7.0 -> your php version (8.0.3)) [duplicate]Composer 安装和更新问题(需要 php ^7.0 -> 您的 php 版本(8.0.3))[重复]
【发布时间】:2021-06-18 10:17:39
【问题描述】:

我们开始在新项目中使用 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

composer install 在 Symfony 项目中的示例:

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 8 兼容的版本?
  • 问题是我们还使用了还没有 PHP 8 更新的包。因此这个问题与依赖项有关。降级整个项目的 PHP 版本也是不可能的,因为我们已经在代码中使用了 PHP 8 的特性。我们使用开关“--ignore-platform-req=php”临时解决了这个问题
  • 是否有任何理由,例如:any,使用这种旧版本的 Twig?为什么不更新呢?
  • @MartinOsusky,如果您有解决方案,请将其添加到答案部分而不是您的问题中(特别是当解决方案绝对是错误提示时;))。
  • @gp_sflover 一天前加的,现在只回复cmets :)

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


【解决方案1】:

更新:

最终解决方案

使用支持 PHP 8 的更新包。大多数软件包都是最新的。

如果某些明确需要较低版本的 PHP,请寻找替代品。或者 fork 并更新。

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

临时快速解决方案

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"
       }
    }
}

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

【讨论】:

  • composer.json 中还有一个平台部分,允许您设置作曲家使用的 PHP 版本,从而无需额外的忽略参数。
  • @Cerad 但是你不想,当然你也不能在所有供应商包上更改 composer.json。
  • @Cerad 你的意思是 { "config": { "platform": { "php": "7.0.0" } } } 问题是开发者忘记了,即使更新了包,理论上以后PHP版本的依赖可能会出现问题。最重要的是,还有需要php8的包和需要php7的旧包..最终并没有解决问题
  • 当然是您的选择,尽管我并没有真正看到忽略依赖项实际上是如何解决“问题”的。无论如何,真正的问题是为什么这些软件包没有被调整为在 PHP 8 下安装。现在已经三个多月了。只需对 composer.json 进行微调,快速测试,然后点击发布按钮。就我个人而言,我不会使用任何尚未更新的软件包。或者至少我会分叉它们并自己进行调整。
  • 我完全同意你的观点,这就是为什么我不推荐永久解决方案,它基于 composer.json 中的强制版本,而只是暂时忽略 PHP 版本依赖性。以便开发人员可以安装项目,然后执行以下步骤。 (替换问题包或 fork 并修改)。
【解决方案2】:

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

【讨论】:

  • 我明白了,降级已经不可能了,因为我们已经有了很多使用八进制特性的功能。
猜你喜欢
  • 2022-10-19
  • 1970-01-01
  • 2018-01-26
  • 2021-04-21
  • 2021-03-28
  • 2020-02-02
  • 1970-01-01
  • 2021-12-21
  • 2022-11-23
相关资源
最近更新 更多