在作曲家中覆盖 PHP 基本依赖项

Posted

技术标签:

【中文标题】在作曲家中覆盖 PHP 基本依赖项【英文标题】:Override PHP base dependency in composer 【发布时间】: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 上运行的包。 另见:Reference - Composer error “Your PHP version does not satisfy requirements” after upgrading 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

运行:作曲家安装

对我有用

【讨论】:

以上是关于在作曲家中覆盖 PHP 基本依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何防止在“作曲家更新”命令时覆盖文件

覆盖 Databricks 依赖项

覆盖 laravel 5 辅助函数

为什么我的作曲家依赖项没有在docker容器中找到但是本机在我的mac上?

覆盖 Micronaut 测试中的依赖项

是否可以在Scala中模拟/覆盖依赖项/导入?