我上次部署项目时,构建工作正常。
同时,我没有进行任何更改,不会影响点子要求,但是在构建时出现错误:
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
在本地构建项目时,我遇到相同的错误。
可能是什么问题?
答案 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团队的成员。这个问题是我们经常通过支持渠道看到的。