【问题标题】:Override PHP base dependency in composer在作曲家中覆盖 PHP 基本依赖项
【发布时间】:2015-12-26 15:11:41
【问题描述】:

我尝试在只有 PHP 5.5.6 的主机上安装 Laravel 5.1。虽然我要求客户升级,但这可能是不可能/不可行的。

所以我得到:

- This package requires php >=5.5.9 but your PHP version (5.5.6)
   does not satisfy that requirement.

composer.phar install.

有没有办法让作曲家安装忽略这种依赖关系?

我认为它应该是安全的,因为只有从 5.5.6 到 5.5.9 的错误修复。

【问题讨论】:

  • 不幸的是,Laravel 项目宣布他们的 5.1 版本与他们可以在 TravisCI 上测试的最旧的 PHP 版本兼容,即 5.5.9。一方面这是一个合理的选择。另一方面,对于在旧版本 5.5 PHP 分支上运行的人来说,这是一个不必要的障碍,因为在 5.5.9 之前的 PHP 5.5 中没有向后不兼容的更改 - 代码将运行。 --ignore-platform-req 的问题是它会影响所有的包,你可能会得到只在 PHP 5.6 上运行的包。

标签: php composer-php


【解决方案1】:

您可以为诸如installupdate 等作曲家命令使用--ignore-platform-reqs 选项。

--ignore-platform-reqs:忽略php、hhvm、lib-*和ext-*要求,即使本地机器不满足也强制安装这些。另请参阅平台配置选项。

https://getcomposer.org/doc/03-cli.md

所以你可以试试

composer install --ignore-platform-reqs

【讨论】:

  • 是否还有一种更细粒度的方法,它只忽略 PHP 版本?或者我什至可以要求 5.5.6 而不是 5.5.9
  • 我不认为有这样的事情。至少我找不到。
  • 找到了方法。直接在文档中。但仅适用于子包。看我的回答。
  • 也检查this question
【解决方案2】:

错误消息表明来自主composer.json 的要求。版本要求可以随意调整:

"require": {
    "php": ">=5.5",

像这样更改版本后,我得到:

  Problem 1
    - Installation request for classpreloader/classpreloader 2.0.0 -> satisfiable by classpreloader/classpreloader[2.0.0].
    - classpreloader/classpreloader 2.0.0 requires php >=5.5.9 -> your PHP version (5.5.6) or "config.platform.php" value does not satisfy that requirement.
  Problem 2
    - Installation request for laravel/framework v5.1.17 -> satisfiable by laravel/framework[v5.1.17].
    - laravel/framework v5.1.17 requires php >=5.5.9 -> your PHP version (5.5.6) or "config.platform.php" value does not satisfy that requirement.
  Problem 3
    - Installation request for laravelcollective/html v5.1.6 -> satisfiable by laravelcollective/html[v5.1.6].
    - laravelcollective/html v5.1.6 requires php >=5.5.9 -> your PHP version (5.5.6) or "config.platform.php" value does not satisfy that requirement.
  Problem 4
    - laravel/framework v5.1.17 requires php >=5.5.9 -> your PHP version (5.5.6) or "config.platform.php" value does not satisfy that requirement.
    - jenssegers/agent v2.1.7 requires illuminate/support ~4.0|~5.0 -> satisfiable by laravel/framework[v5.1.17].
    - Installation request for jenssegers/agent v2.1.7 -> satisfiable by jenssegers/agent[v2.1.7].

composer.json中使用如下sn-p,可以模拟一个php版本

[...]
"config": {
    "preferred-install": "dist",
    "platform": {
        "php": "5.5.9"
    }
}

文档:https://getcomposer.org/doc/06-config.md#platform

平台

允许您伪造平台包(PHP 和扩展),以便您可以模拟生产环境或在配置中定义目标平台。示例:{“php”:“5.4”,“ext-something”:“4.0”}。

不要忘记在此之后运行composer.phar update

【讨论】:

  • 我浏览了platform 部分,但没有仔细阅读。如此简单:) 我已在您的答案中添加了文档引用。
  • 如果您的基础 PHP 运行的版本与运行代码的版本不同,这里提到的平台包的模拟也会有所帮助。例如,我的一台运行 Plesk 的服务器具有 5.3.x 的基本 PHP 版本,虚拟站点的代码在 5.4.x 上运行。如果没有这个,集中安装的作曲家只会选择基础版本,因此在尝试使用依赖于不同 PHP 版本的包时会产生问题
  • 有没有办法从 CLI 做到这一点?类似composer install --config platform.php 5.3.3
  • @Starx 为什么不使用--ignore-platform-reqs
  • @Starx:是的,composer config platform.php 5.6
【解决方案3】:

我遇到了同样的问题,通过以下命令解决了:

composer config platform.php 7.2.22 

*** 你可以根据你的替换 PHP 版本。

【讨论】:

  • 你确定这有帮助吗?如果包要求特定的 PHP 版本,可能有充分的理由不忽略此
  • @NicoHaase 是的,绝对是......我已经对此进行了测试,它对我有用,这就是为什么如果它对其他人有帮助,我会在这里分享。
  • @NicoHaase 另外我不是要求忽略 php 版本,我的问题是我的作曲家文件中提到的 php 版本不正确,我已更正并且作曲家安装工作。
  • 谢谢。这对于 Mac Catalina 上立即更新 php 的用户可能非常有用。
  • 我认为好的方法是:composer install --ignore-platform-reqs 这个命令救了我的命..哈哈:v
【解决方案4】:

根 composer.json 需要 php ^7.3,但您的 php 版本 (8.0.0) 不满足该要求。

composer install --ignore-platform-reqs

【讨论】:

  • 谢谢,我无法在推荐项目composer --ignore-platform-reqs create-project drupal/recommended-project:8.9.20 project-name 中使用其他答案,但这个答案有效。
【解决方案5】:

运行与版本无关的命令可解决此错误 composer install --ignore-platform-reqs

【讨论】:

    【解决方案6】:

    更改您的 php 版本,例如

    "require": {
        "php": "^7.3|^8.0",
        .....
    },
    

    或喜欢

    "require": {
        "php": ">=7.3",
        .....
    },
    

    【讨论】:

      【解决方案7】:

      只需在 composer.json 文件中添加这些行

        "config": {
          "platform": {
            "php": "5.5.9"
          }
        },
      

      然后运行命令,

      composer update or install
      

      【讨论】:

        【解决方案8】:

        在 composer.json 中更改 php 版本

        删除 composer.lock

        运行:作曲家安装

        对我有用

        【讨论】:

          猜你喜欢
          • 2016-03-31
          • 1970-01-01
          • 1970-01-01
          • 2014-03-10
          • 2014-03-18
          • 2016-09-23
          • 2014-05-31
          • 2013-04-15
          相关资源
          最近更新 更多