php - 为什么某些 Composer 软件包在同一版本中会相互冲突?

标签 php dependencies composer-php

我需要一个 xml 序列化器来运行在 php5 上的遗留应用程序。我尝试安装symfony/[email protected] ,这应该适用于我的环境。

看来不可能:

$ composer require symfony/serializer=v3.4.47
[...]
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires symfony/serializer v3.4.47 -> satisfiable by symfony/serializer[v3.4.47].
    - symfony/serializer v3.4.47 conflicts with symfony/serializer v3.4.47.

Installation failed, reverting ./composer.json and ./composer.lock to their original content.

实际上,当平台设置为 php 5 时,无法安装此软件包,因为每个兼容版本都与自身冲突。

  • 是否有某种锁定来防止安装包含安全问题的软件包?
  • 除了 fork 之外,是否可以强制 Composer 安装此类冲突的软件包?

编辑:

@Nico Haase 请求对更改前后的composer.json 进行比较。

以下是更改后的片段:

{
  "name": "my/library",
  "description": "I'll omit irrelevant and/or unchanged parts",
  "config": {
    "platform": {
-      "php": "5.4.45"
+      "php": "5.6.40"
    }
  },

  "require-dev": {
    "phpunit/phpunit": "^4.8",
    "wsdl2phpgenerator/wsdl2phpgenerator": "^3.4"
  },
  "require": {
    "my/library1": "^221.0.2",
    "my/library2": "dev-master",
    "my/library3": "dev-master",
    "my/library4": "dev-master",
    "ext-soap": "*",
+    "ext-json": "*",
+    "symfony/serializer": "v3.4.47",
+    "symfony/property-access": "^3.4"
  }
}

如您所见,更改之前不需要 symfony 软件包,因此我预计不会安装它。但它确实是,作为 wsdl2phpgenerator 的开发依赖项,而且它已经很老了。根据composer.lock,安装的版本是v2.8.52

Composer 软件包的全面更新以及 PHP 版本从 5.4(之前接触此库时使用的版本)到我们现在使用的 5.6,允许依赖项升级到兼容版本。

如果不是奇怪的 Composer 冲突消息,所有这一切都不会成为问题:

    - symfony/serializer v3.4.47 conflicts with symfony/serializer v3.4.47.

我希望它会是这样:

    - symfony/serializer v3.4.47 requires symfony/yaml v3.4.47
    - symfony/yaml v3.4.7 confitcs with symfony/yaml v2.8.52 

...或类似的东西,这会提示我更新依赖项的方向。

最佳答案

实际问题似乎与旧版本的 symfony/yaml 发生冲突。那些遗留应用程序...

我已经通过运行解决了问题:

$ composer update
[...]
  - Upgrading symfony/yaml (v2.8.52 => v3.4.47)

然后我就可以成功requireserializer包。

综上所述,如果一个包在同一版本中与自身发生冲突,那么它实际上可能与其在不兼容版本中已安装的依赖项发生冲突。

不过,Composer 错误消息没有帮助。

关于php - 为什么某些 Composer 软件包在同一版本中会相互冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73137773/

相关文章:

javascript - 支付网关集成 - Javascript 不工作

php - 如果变量为空或未赋值,则将值放入函数中不起作用

php - 无法打开输入文件 [COMPOSER]

mongodb - 如何配置sonata用户包

php - 多表删除查询不起作用

php - 创建个性化下载链接

android - 应用程序不会在设备 : DELETE_FAILED_INTERNAL_ERROR? 上运行

java - 创建公共(public)类,具有依赖关系,我如何正式共享此依赖关系?

ios - 用于将框架链接和嵌入到工作区中的应用程序的 Xcode 构建过程

php - 为什么我不能运行 bin/behat?