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

标签 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在本地构建项目时,出现相同的错误。

可能是什么问题呢?

最佳答案

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

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

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

这是一个例子。假设您的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,要求使用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团队的成员。我们通过支持 channel 经常看到这个问题。

关于docker - 我没有在Divio项目中更改要求,那么为什么构建因依赖冲突而失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53227020/

相关文章:

docker - 将图像从受本地Docker保护的本地Docker注册表中提取到Kubernetes

git - 在Docker化远程Git存储库中有什么意义吗?

python - 为什么 Python 升级到 3.8 后 Pip 无法运行?

Django-cms aldryn 表单

docker - 无法从 docker-compose 连接到 docker

docker - Docker compose想要引擎> 1.10.0,但是已经有引擎1.12.3

python - 不使用 virtualenv 时安装包的位置

python - Pip 在 Windows 7 中挂起

python - 尝试部署时未找到 Django 设置