【问题标题】:composer.json fails to resolve installable set of packagecomposer.json 无法解析可安装的软件包集
【发布时间】:2018-03-25 23:03:11
【问题描述】:

我无法使用 Composer 安装 stof/doctrine-extensions-bundle。我使用的是 Symfony2.1.9 版本,出现了很多问题。第一个是:

找不到请求的包 stof/doctrine-extensions-bundle 1.1.*。

这是我的composer.json 文件:

{
    "name": "symfony/framework-standard-edition",
    "description": "The \"Symfony Standard Edition\" distribution",
    "autoload": {
        "psr-0": { "": "src/" }
    },
    "require": {
        "php": ">=5.3.3",
        "symfony/symfony": "2.1.*",
        "doctrine/orm": ">=2.2.3,<2.5-dev",
        "doctrine/doctrine-bundle": "1.1.*",
        "twig/extensions": "1.0.*@dev",
        "symfony/assetic-bundle": "2.1.*",
        "symfony/swiftmailer-bundle": "2.1.*",
        "symfony/monolog-bundle": "2.1.*",
        "sensio/distribution-bundle": "2.1.*",
        "sensio/framework-extra-bundle": "2.1.*",
        "sensio/generator-bundle": "2.1.*",
        "jms/security-extra-bundle": "1.2.*",
        "jms/di-extra-bundle": "1.1.*",
        "kriswallsmith/assetic": "1.1.*@dev",
        "pagerfanta/pagerfanta": "dev-master",
        "white-october/pagerfanta-bundle": "dev-master",
        "friendsofsymfony/user-bundle": "dev-master",
        "saad-tazi/g-chart-bundle": "dev-master",
       "stof/doctrine-extensions-bundle": "1.1.*",
    },
    "scripts": {
        "post-install-cmd": [
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
        ],
        "post-update-cmd": [
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
        ]
    },
    "extra": {
        "symfony-app-dir": "app",
        "symfony-web-dir": "web",
        "branch-alias": {
            "dev-master": "2.1-dev"
        }
    }
}

当我将包要求设置为:"stof/doctrine-extensions-bundle": "1.1.*@dev" 回复是:your requirement could not be resolved to an installable set of package

请问可能是什么问题? 我应该先安装 DoctrineExtensions 吗????

错误信息:

Problem 1
    - Conclusion: don't install symfony/symfony v2.1.10
    - Conclusion: remove symfony/symfony v2.1.9
    - Conclusion: don't install symfony/symfony v2.1.9
    - Conclusion: don't install symfony/symfony v2.1.8
    - Conclusion: don't install symfony/symfony v2.1.7
    - Conclusion: don't install symfony/symfony v2.1.6
    - Conclusion: don't install symfony/symfony v2.1.5
    - Conclusion: don't install symfony/symfony v2.1.4
    - Conclusion: don't install symfony/symfony v2.1.3
    - Conclusion: don't install symfony/symfony v2.1.2
    - Conclusion: don't install symfony/symfony v2.1.1
    - white-october/pagerfanta-bundle dev-master requires symfony/framework-bundle >=2.2,<3.0 -> satisfiable by symfony/symfony[v2.2.0, v2.2.1], symfony/framework-bundle[v2.2.0, v2.2.1].
    - white-october/pagerfanta-bundle dev-master requires symfony/framework-bundle >=2.2,<3.0 -> satisfiable by symfony/symfony[v2.2.0, v2.2.1], symfony/framework-bundle[v2.2.0, v2.2.1].
    - Can only install one of: symfony/symfony[v2.2.0, v2.1.0].
    - Can only install one of: symfony/symfony[v2.2.1, v2.1.0].
    - don't install symfony/framework-bundle v2.2.0|don't install symfony/symfony v2.1.0
    - don't install symfony/framework-bundle v2.2.1|don't install symfony/symfony v2.1.0
    - Installation request for symfony/symfony 2.1.* -> satisfiable by symfony/symfony[v2.1.0, v2.1.1, v2.1.10, v2.1.2, v2.1.3, v2.1.4, v2.1.5, v2.1.6, v2.1.7,v2.1.8, v2.1.9].
    - Installation request for white-october/pagerfanta-bundle dev-master -> satisfiable by white-october/pagerfanta-bundle[dev-master].

【问题讨论】:

  • 复制完整的错误信息,而不仅仅是摘录!

标签: symfony symfony-2.1 composer-php


【解决方案1】:

这里的关键部分如下:

[...]
white-october/pagerfanta-bundle dev-master requires symfony/framework-bundle >=2.2,<3.0 -> satisfiable by symfony/symfony[v2.2.0, v2.2.1], symfony/framework-bundle[v2.2.0, v2.2.1].
[...]

这会导致混乱!让我解释一下:

虽然它说可以通过将 symfony/symfony 更新到 2.2.0 或 2.2.1 来满足依赖关系......这个更新是 不需要 !! (即使更新可能是个好主意,也没有必要解决问题,并且可能由于 BC [向后兼容性] 中断而导致代码损坏)

注意:

许多包都有一个legacy 分支 ...例如一个2.1.x 分支来支持symfony/symfony 2.1。

在盲目地将整个项目更新到根包的新版本之前,请在 packagist 上查找这些分支!

提示

通常,如果 composer 无法获取依赖项,这通常与您所需软件包之一的最低稳定性有关。所有包的最低稳定性通常默认为 stable

解决方案:

smarttech 为 white-october/pagerfanta-bundle 使用了错误的分支 (dev-master) 以将其与 symfony 2.1 一起使用。 2.1 的 正确分支 应该是:

"white-october/pagerfanta-bundle": "2.1.*@dev"

... @dev 稳定性标志告诉作曲家使用 dev 版本的学说扩展包用于这个单个包。请阅读更多关于作曲家的Stability Flags

快速浏览一下稳定性层次结构

dev < alpha < beta < rc < stable

替代方案:

解决问题的另一种方法是设置作曲家的minimum stability

虽然这是不推荐,因为它适用于所有约束,因此您将获得所有包的不稳定版本。

{

    [...]
    "require" :

        [...]

    "minimum-stability" : "dev",

    [...]

}

【讨论】:

  • 最小稳定性:开发非常糟糕。这将导致所有捆绑包克隆最新的提交。这对开发自己的应用程序没有帮助。
  • 不要这样做,因为这是不好的做法。
  • 很抱歉@nifr.please 在哪里写这行。对不起,我很困惑
  • @smarttech 简单地说,不要这样做。
  • Nice @Pazi ...您对我的回答投了反对票,并使 smarttech 不必要地将 symfony 更新到 2.2 ...所以请删除您对我的回答的反对票,该回答现在提供了正确的解决方案和必要的信息。谢谢
【解决方案2】:

由于stof/doctrine-extensions-bundle 的 1.1.x 分支仍然只能作为开发人员使用。因此,您必须在 composer.json 中将其声明为开发依赖项。简单地说:

"stof/doctrine-extensions-bundle": "1.1.*@dev"

下次看看 packagist,哪些版本可用于所需的捆绑包。

编辑:是的,在新的 symfony 安装中测试了这个要求,它可以工作。因此,如果您有错误,请在您的问题中编辑完整的错误消息!

【讨论】:

    【解决方案3】:

    因为这是一个完全不同的答案。你的问题不是stof/doctrine-extensions-bundle,而是white-october/pagerfanta-bundle。孩子们,请阅读错误消息!

    我怎么知道的?只需复制您的 composer.json,执行更新并收到一条有意义的错误消息:

     white-october/pagerfanta-bundle dev-master requires symfony/framework-bundle >=2.2,<3.0 -> satisfiable by symfony/symfony[v2.2.0, v2.2.1], symfony/framework-bundle[v2.2.0, v2.2.1].
    

    也就是说,pagerfanta-bundle的实际版本需要symfony 2.2,所以你必须升级才能使用它。

    【讨论】:

    • 谢谢@Pazi,现在一切顺利
    • @smarttech Pazi 向您指出了一个错误的解决方案。虽然它现在对你有用了……没有必要将 symfony 更新到 2.2!在大型项目中,这会导致代码中出现各种 BC 中断。我的答案现在包含所有信息。请接受它,因为它是正确的。
    • 谢谢 :-) 虽然“pagerfanta-bundle 的实际版本需要 symfony 2.2”的提示本身并没有错……正确的解决方案就是使用正确的遗留分支。
    猜你喜欢
    • 2018-03-06
    • 2021-10-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2014-01-26
    • 2015-06-20
    • 2019-04-21
    相关资源
    最近更新 更多