我已经有了 geoip2 软件包已安装。当我前段时间安装它时,它需要guzzle3。*所以它安装了guzzle3.9.1作为其依赖项之一。

现在我想安装 预测,预测 包,所以我把它添加到我的作曲家。json格式

"require": {
    ...
    ...
    "geoip2/geoip2": "0.6.*",
    "predictionio/predictionio": "~0.7.1"
}

问题是 预测;预测 需要guzzle3.8.0或3.8.1,它不会接受已经安装的3.9.1版本。

我相信 狂饮,狂饮 3.8.0将满足两者 geoip2预测;预测, ,所以问题是我怎样才能降级 狂饮,狂饮, ,牢记 狂饮,狂饮 没有出现在我的作曲家。json,只有作曲家。锁上

下面是我运行时的输出 composer update predictionio/predictionio

  Problem 1
    - Installation request for predictionio/predictionio ~0.7.1 -> satisfiable by predictionio/predictionio[v0.7.1].
    - Conclusion: remove guzzle/guzzle v3.9.1
    - predictionio/predictionio v0.7.1 requires guzzle/guzzle ~3.8.0 -> satisfiable by guzzle/guzzle[v3.8.0, v3.8.1].
    - Can only install one of: guzzle/guzzle[v3.9.1, v3.8.0].
    - Can only install one of: guzzle/guzzle[v3.9.1, v3.8.1].
    - Installation request for guzzle/guzzle == 3.9.1.0 -> satisfiable by guzzle/guzzle[v3.9.1].
有帮助吗?

解决方案

你不需要给你的 composer.json.您所要做的就是在添加新软件包时更新Guzzle。(这将降级Guzzle以匹配Bio的要求)

简单地运行

composer update predictionio/predictionio guzzle/guzzle

正如您所看到的,您可以提供多个包来 composer update 用一个空间把它们分开。这在描述 文件.

其他提示

与问题相关的一些提示:

通过运行 composer update named/package, ,你只允许这个包被添加或它的版本增加,但没有别的。同样的(但只添加东西)会发生在 composer require named/package:~1.0 (这是一个很好的方式来添加东西,而不必搞乱json格式)。

更新东西时最简单的解决方案是只运行 composer update.如果没有包名称,则可能会更新所有包。

如果您不小心选择软件包,更新所有内容可能会有点风险。就我个人而言,我建议使用某种程度上似乎使用语义版本控制的软件,这非常好地允许在Composer中使用波浪号版本要求。我会说每个人都应该尝试使用 ~X.Y 作为版本描述,因为这允许安装补丁和兼容的更新。

您使用的库应该允许其依赖项的足够松散定义的版本。在你的例子中, predictionio/predictionio 包装要求 guzzle/guzzle:~3.8.0 -他们可能有理由这样做,但反过来迫使每个人试图使用他们的软件使用Guzzle3.8.0或3.8.1。我怀疑Guzzle维护人员会打破向后兼容性,因为他们知道他们创建了一个非常重要的,基本的软件,预计可以工作,我认为他们很快就会收到错误报告,如果他们我非常希望看到任何库的依赖关系,以允许不受限制的兼容更新,即在这种情况下 ~3.8 会好得多。

不惜一切代价避免依赖分支机构。如果使用分支是不可避免的,请为其分配别名版本号: require: { "named/package": "dev-master as 1.2.2" } 如果从早期版本中无法猜到正确的版本号,请从0.0.0开始。这样,您可以稍后切换到已发布的版本,这将更好地集成到其余版本号中。

如果要安装特定版本的软件包,只需将其添加到composer即可。json在 要求 部分:

    "guzzle/guzzle" : "3.8.0",

然后

  composer update guzzle/guzzle
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top