这里的问题是,尽管您可能没有修改任何需求,但项目的依赖项有时会自行更改。
您甚至可能已经固定了您自己的所有需求(这通常是一个好主意),但如果其中一个需求本身具有未固定的依赖项,那仍然无济于事。
任何存在未固定依赖项的地方,您都可能遇到这种情况。
这是一个例子。假设您requirements.in
包含super-django==1.2.4
. 这比简单地指定要好super-django
,因为如果发布了新的、不兼容的 Super Django 包版本,您不会感到惊讶。
但是假设反过来 Super Django 1.2.4 在其要求中列出:
Django==1.11
django-super-admin
如果发布了新版本的 Django Super Admin,这需要 say 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中提供了更多相关信息。
您还可以固定您项目的所有 Python 依赖项,以确保不会再发生任何其他依赖项,尽管您牺牲了一些灵活性来保证。
注意:我是 Divio 团队的成员。这个问题是我们通过我们的支持渠道经常看到的一个问题。