首页 > 解决方案 > Composer 显示 2 个兼容包之间的冲突(原始)

问题描述

我尝试composer install依赖我的依​​赖项时出错。与 相同的错误composer update

它说 symfony/web-server-bundle 4.3.3 和 symfony 3.4 之间存在冲突,但这些软件包应该是兼容的:

这是我的控制台输出:

$ composer install --ignore-platform-reqs
Deprecation warning: Your package name theredled/. is invalid, it should have a vendor name, a forward slash, and a package name. The vendor and package name can be words separated by -, . or _. The complete name should match "[a-z0-9]([_.-]?[a-z0-9]+)*/[a-z0-9]([_.-]?[a-z0-9]+)*". Make sure you fix this as Composer 2.0 will error.
Deprecation warning: require.beberlei/DoctrineExtensions is invalid, it should not contain uppercase characters. Please use beberlei/doctrineextensions instead. Make sure you fix this as Composer 2.0 will error.
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for symfony/symfony v3.4.30 -> satisfiable by symfony/symfony[v3.4.30].
    - don't install symfony/web-server-bundle v4.3.3|don't install symfony/symfony v3.4.30
    - Installation request for symfony/web-server-bundle v4.3.3 -> satisfiable by symfony/web-server-bundle[v4.3.3].

这是我的composer.json:

{
    "name": "theredled/.",
    "license": "proprietary",
    "type": "project",
    "autoload": {
        "psr-4": {
            "": "src/"
        },
        "classmap": [
            "app/AppKernel.php",
            "app/AppCache.php"
        ]
    },
    "autoload-dev": {
          "psr-4": {
              "App\\Tests\\": "tests/"
          }
      },
    "require": {
        "php": ">=7.1.0",
        "symfony/symfony": "3.4.*",
        "doctrine/orm": "~2.6",
        "doctrine/doctrine-bundle": "~1.9",
        "symfony/swiftmailer-bundle": "~3.2",
        "symfony/monolog-bundle": "~3.3",
        "sensio/distribution-bundle": "~5.0",
        "incenteev/composer-parameter-handler": "~2.1",
        "twig/extensions": "^1.5",
        "liip/imagine-bundle": "^2.1",
        "spe/filesize-extension-bundle": "~1.0.0",
        "doctrine/doctrine-migrations-bundle": "^1.3",
        "beberlei/DoctrineExtensions": "^1.1",
        "excelwebzone/recaptcha-bundle": "^1.5",
        "knplabs/knp-snappy-bundle": "^1.5",
        "knplabs/knp-paginator-bundle": "^2.8",
        "debesha/doctrine-hydration-profiler-bundle": "^1.3",
        "xmon/color-picker-type-bundle": "^1.0",
        "symfony/assetic-bundle": "^2.8",
        "symfony/console": "~3.4",
        "eightpoints/guzzle-bundle": "^7.4",
        "symfony/webpack-encore-bundle": "^1.6",
        "sentry/sentry-symfony": "^2.1",
        "cocur/slugify": "^3.2"
    },
    "require-dev": {
        "sensio/generator-bundle": "~3.0",
        "symfony/browser-kit": "^4.3",
        "symfony/css-selector": "^4.3",
        "symfony/phpunit-bridge": "^4.3",
        "onurb/doctrine-yuml-bundle": "1.1.5",
        "phpunit/php-code-coverage": "^6.1",
        "hautelook/alice-bundle": "^2.5",
        "doctrine/data-fixtures": "^1.3",
        "symfony/web-server-bundle": "^4.3"
    },
    "scripts": {
        "post-install-cmd": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
        ],
        "post-update-cmd": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
        ]
    },
    "config": {
        "bin-dir": "bin",
        "platform": {
            "php": "7.1.11"
        }
    },
    "extra": {
        "symfony-app-dir": "app",
        "symfony-web-dir": "web",
        "symfony-assets-install": "relative",
        "incenteev-parameters": {
            "file": "app/config/parameters.yml"
        },
        "symfony": {
            "allow-contrib": "true"
        }
    }
}

任何想法?

标签: phpsymfonycomposer-php

解决方案


正如我最近在另一个答案中所描述的那样,您确实会收到此错误消息,因为symfony/symfony它可以替代symfony/web-server-bundle完全相同的版本,因为这行:https://github.com/symfony/symfony/blob/3.4/composer。 json#L85

composer 文档准确地告诉了你这一点,并以 Symfony 为例来解释该replace部分:

这对于包含子包的包也很有用,例如主 symfony/symfony 包包含所有 Symfony 组件,这些组件也可以作为单独的包使用。如果您需要主包,它将自动满足单个组件之一的任何要求,因为它会替换它们。

来源: https ://getcomposer.org/doc/04-schema.md#replace

因此,composer.json就目前的情况而言,您指示作曲家symfony/web-server-bundle在该版本上安装并在该版本4.3.3上安装(通过在版本上安装的请求,表示它替换了该软件包),并且作曲家最终处于不兼容状态,如解释由于错误,要同时安装两个不同版本的软件包。symfony/web-server-bundle3.4.30symfony/symfony3.4.30

- don't install symfony/web-server-bundle v4.3.3|don't install symfony/symfony v3.4.30
- Installation request for symfony/web-server-bundle v4.3.3 -> satisfiable by symfony/web-server-bundle[v4.3.3].

=>不安装symfony/web-server-bundle是真正的意思:你实际上不需要它,它是symfony/symfony已经的一部分

从这里你有三个选择:

  1. 您删除了对symfony/web-server-bundle中的要求composer.json(但这意味着您必须在版本中使用该软件包3.4.30,如 提供symfony/symfony
  2. 您将您的symfony/symfony软件包升级到4.3.3(仍然不满足您的要求,symfony/web-server-bundle因为composer.json确实symfony/symfony替换了它)。
  3. 你需要一个一个你需要的symfony/*包,而不是通过“超级包” symfony/symfony
    从长远来看,这需要更多的工作和更多可能的不兼容问题,但这是symfony/web-server-bundle在 version^4.0中仍有其他 Symfony 包时拥有的唯一方法^3.0
    一个例子是替换你的这一行composer.json

    "symfony/symfony": "3.4.*",
    

    "symfony/asset": "3.4.*",
    "symfony/browser-kit": "3.4.*",
    "symfony/cache": "3.4.*",
    "symfony/class-loader": "3.4.*",
    "symfony/config": "3.4.*",
    "symfony/console": "3.4.*",
    "symfony/css-selector": "3.4.*",
    "symfony/dependency-injection": "3.4.*",
    "symfony/debug": "3.4.*",
    "symfony/debug-bundle": "3.4.*",
    "symfony/doctrine-bridge": "3.4.*",
    "symfony/dom-crawler": "3.4.*",
    "symfony/dotenv": "3.4.*",
    "symfony/event-dispatcher": "3.4.*",
    "symfony/expression-language": "3.4.*",
    "symfony/filesystem": "3.4.*",
    "symfony/finder": "3.4.*",
    "symfony/form": "3.4.*",
    "symfony/framework-bundle": "3.4.*",
    "symfony/http-foundation": "3.4.*",
    "symfony/http-kernel": "3.4.*",
    "symfony/inflector": "3.4.*",
    "symfony/intl": "3.4.*",
    "symfony/ldap": "3.4.*",
    "symfony/lock": "3.4.*",
    "symfony/monolog-bridge": "3.4.*",
    "symfony/options-resolver": "3.4.*",
    "symfony/process": "3.4.*",
    "symfony/property-access": "3.4.*",
    "symfony/property-info": "3.4.*",
    "symfony/proxy-manager-bridge": "3.4.*",
    "symfony/routing": "3.4.*",
    "symfony/security": "3.4.*",
    "symfony/security-core": "3.4.*",
    "symfony/security-csrf": "3.4.*",
    "symfony/security-guard": "3.4.*",
    "symfony/security-http": "3.4.*",
    "symfony/security-bundle": "3.4.*",
    "symfony/serializer": "3.4.*",
    "symfony/stopwatch": "3.4.*",
    "symfony/templating": "3.4.*",
    "symfony/translation": "3.4.*",
    "symfony/twig-bridge": "3.4.*",
    "symfony/twig-bundle": "3.4.*",
    "symfony/validator": "3.4.*",
    "symfony/var-dumper": "3.4.*",
    "symfony/web-link": "3.4.*",
    "symfony/web-profiler-bundle": "3.4.*",
    "symfony/workflow": "3.4.*",
    "symfony/yaml": "3.4.*"
    

    我刚刚通过复制's的replace部分symfony/symfonycomposer.json创建了它,我用"self.version"你的实际symfony/symfony版本替换了 's ,最后,删除了 package symfony/web-server-bundle,因为你已经在另一个版本上需要它了。

至于你对 of 的误解composer.json,这个包确实与列出symfony/web-server-bundler的 Symfony 的包兼容:^4.0

  • symfony/配置
  • symfony/控制台
  • symfony/依赖注入
  • symfony/http 内核
  • symfony/polyfill-ctype
  • symfony/进程

不适用于捆绑的“超级包” ,它的要求部分中symfony/symfony确实不存在composer.json


推荐阅读