我没有在Divio项目中更改要求,那么为什么构建会因依赖冲突而失败?

时间:2018-11-09 13:52:16

标签: docker pip divio

我上次部署项目时,构建工作正常。

同时,我没有进行任何更改,不会影响点子要求,但是在构建时出现错误:

Could not find a version that matches Django<1.10,<1.10.999,<1.11,
<1.12,<1.9.999,<2,<2.0,==1.9.13,>1.3,>=1.11,>=1.3,>=1.4,>=1.4.10,
>=1.4.2,>=1.5,>=1.6,>=1.7,>=1.8

使用docker-compose build web在本地构建项目时,我遇到相同的错误。

可能是什么问题?

1 个答案:

答案 0 :(得分:2)

这里的问题是,尽管可能没有修改任何要求,但是项目的依赖项有时可以自行更改。

您甚至可能已经固定了所有自己的需求(通常是个好主意),但是如果其中之一本身具有未固定的依赖项,那仍然无济于事。

在任何存在未固定依赖项的地方,您都可以遇到此问题。

这是一个例子。假设您的requirements.in包含super-django==1.2.4。这比简单地指定super-django更好,因为如果发布了新的,不兼容的Super Django软件包,您将不会感到惊讶。

但是,假设超级Django 1.2.4在要求中列出:

Django==1.11
django-super-admin

如果发布了新版本的Django Super Admin,要求输入Django>=2.0,则由于相互排斥的要求,您的下一个版本将失败。

要在遇到此类故障时追查罪魁祸首,您需要检查构建日志。您会看到类似以下的内容:

Could not find a version that matches Django==1.11,>=2.0 [etc].

因此,现在您知道要回顾日志以查找要安装的Django>=2.0,然后您会发现:

adding Django>=2.0
  from django-super-admin==1.7.0

因此,您现在知道django-super-admin==1.7.0是关键。由于您不信任super-django来固定正确版本的django-super-admin,因此您必须自己完成此工作,方法是将django-super-admin<1.7.0添加到项目的requirements.in中。

How to identify and resolve a dependency conflict上有关于此的更多信息。

您也可以Pin all of your project’s Python dependencies以确保这种情况不会再因其他任何依赖而再次发生,尽管您为此付出了一些灵活性。


注意:我是Divio团队的成员。这个问题是我们经常通过支持渠道看到的。