1

我上次部署项目时,构建工作完美。

与此同时,我没有更改任何会影响 pip 要求的内容,但是在构建时出现错误:

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

可能是什么问题呢?

4

1 回答 1

2

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

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

任何存在未固定依赖项的地方,您都可能遇到这种情况。

这是一个例子。假设您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.0requirements.in您的项目中。

How to identify and resolve a dependency conflict中提供了更多相关信息。

您还可以固定您项目的所有 Python 依赖项,以确保不会再发生任何其他依赖项,尽管您牺牲了一些灵活性来保证。


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

于 2018-11-09T13:52:16.113 回答