Composer - 所请求的包存在,但被您的限制条件拒绝。

60

在使用Composer运行我的安装时,我遇到了这个错误:

λ composer install 您正在启用xdebug运行composer。这对运行时性能有重大影响。请参见https://getcomposer.org/xdebug 正在加载包含软件包信息的composer存储库 更新依赖项(包括require-dev) 无法将您的要求解决为可安装的软件包集。

错误信息:

问题1 - 要求的软件包antoineb1/smoney_bundle 1.0存在,但是被您的限制所拒绝,只有antoineb1/smoney_bundle [dev-master] 可以使用。

我的composer.json

{
    "name": "project",
    "license": "proprietary",
    "type": "project",
    "minimum-stability": "dev",
    "prefer-stable" : true,
    "autoload": {
        "psr-4": {
            "": "src/"
        }
    },
    "config": {
        "preferred-install": "dist"
    },
    "repositories": [
        {
            "url": "bitbucket url",
            "type": "vcs"
        }
    ],
    "require": {
        "php": ">=5.5.9",
        "antoineb1/smoney_bundle": "1.0"
    }
}
6个回答

44
版本约束"1.0"解释为"1.0.0.0-stable"版本。
但是唯一可用的版本是:

antoineb1/smoney_bundle[dev-master].

因此,您可以根据适合您的版本将指定的版本更改为以下任一版本:
  • 1.0.*(由Composer视为>=1.0.0.0-dev <1.1.0.0-dev - 可能不起作用,因为该软件包中显然没有任何版本)
  • dev-master
  • dev-master#<hash>
  • @dev
  • 等。
有关参考,请参阅composer schema

1
我有同样的问题。我的仓库中有一个标签1.1.0可用,但是composer仍然说我只有一个dev-master版本,这甚至不是真的,我没有任何名为dev-master的分支或标签...?!? - Guillaume Bois
2
@GuillaumeBois Composer允许通过将分支指定为“dev-<branchname>”来使用分支作为版本,因此“dev-master”与“master”分支相关联。如果您想指定特定的标签,可以像这样进行:““author/package”:“dev-master#v1.1.0”。有关详细信息,请参见此问题 - BVengerov
14
问题是我的标签是1.1.0,而应该是v1.1.0!天啊,我讨厌电脑... - Guillaume Bois
我遇到了这个问题,因为我忘记将我的标签推送到远程。另外,运行composer clear-cache也是值得的。 - Russ
1
对我来说,在composer.json中设置“5.8.*”总是拉取5.8.0,即使我的远程仓库有5.8.1标签...有什么想法吗?但是如果我直接放置5.8.1,我会得到一个错误:问题1
  • 请求的包myrepo / advanced-custom-fields-pro v5.8.1存在于myrepo / advanced-custom-fields-pro [v5.8.0],但这些被您的约束所拒绝。
任何帮助表示感激。
- trainoasis
显示剩余4条评论

14

@Guillaume在这个答案下面的评论值得更加详细地介绍。

看起来composer需要一个包含vgit发布版本

因此应该是v1.1.0而不是1.1.0

我花了大约90分钟查看:

mikeill/my_repo 3.3.10需要composer/installers 1.0.*@dev -> composer/installers[1.0.x-dev, v1.0.0, ...]满足要求,但这些与您的要求或最小稳定性冲突。

还有很多GitHub问题以及一两篇SO文章,最终才发现这个线程。


1
琐碎但容易被忽视 - i_v_harish
1
似乎使用 v 前缀是“成年人”使用的方式。 - MikeiLL

9
我在这个问题上花费了相当长的时间,失去了大量头发和理智。结果发现,在composer.json文件中,我在包内自己指定了版本号"dev-master",才出现了这个问题。
参考链接:https://getcomposer.org/doc/04-schema.md#version 其中有如下说明:
引用一下:
注意:Packagist使用VCS存储库,因此上面的声明对于Packagist来说也非常正确。您自己指定版本最终很可能会由于人为错误而造成问题。
(强调是我自己加的)
我删除了版本元素后,问题就完美解决了 :)

你在哪里删除了版本元素?我没有任何版本,这是发生在私有的Bitbucket仓库中。 - trainoasis
你是正确的,另一个解决方案是在你的代码库中标记版本号,这样也可以工作。 - Mohamed Saleh

3
我看到了这个问题,并发现另一个问题,这个问题已经完全被我忘记了,但是有人可能会发现它对检查有用。在我的情况下,我有一个非常老的git项目,早些时候进行了分支,我不得不将它们合并在一起(尽管分支项目没有太多更改)。因此,我确定了旧项目上的分裂点,并将其标记为composer版本,以便我可以在新项目的位置使用它。
然而,我忘记了最初我们没有使用composer。因此,在标记点处的文件结构缺少composer.json。我无法想出为什么我的新标记没有出现在“存在”列表中,而这些东西被“您的约束所拒绝”。最终,我意识到我必须在旧标记上创建一个分支,挑选创建项目的composer.json的提交,然后重新标记,然后一切正常。
希望这能唤起某些人的记忆,如果他们带着这个错误信息来搜索的话。

3

搜索一段时间后,我发现我的composer文件缺少这个存储库。可能是有人移除了它,因此只有旧版本可以使用。

...

"require": {
    "company/my-repo": "*"
}

...

"repositories": [
    {
        "type": "vcs",
        "url": "git@bitbucket.org:company/my-repo.git"
    },
],

...

0
我创建了标签和发布,并将仓库发布到Packagist。但是什么都没起作用!我不得不将该仓库添加到composer.json文件中的"repositories"键中。
"repositories": {
    "andreshg112/aws-sns": {
        "type": "vcs",
        "url": "https://github.com/andreshg112/aws-sns.git"
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接