[英]I have not changed requirements in my Divio project, so why does the build fail with a dependency conflict?
我上次部署該項目時,構建工作完美。
同時,我沒有更改任何會影響 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
在本地構建項目時,我遇到了同樣的錯誤。
可能是什么問題呢?
這里的問題是,盡管您可能沒有修改任何需求,但項目的依賴項有時會自行更改。
您甚至可能已經固定了您自己的所有需求(這通常是一個好主意),但是如果其中一個本身具有未固定的依賴項,那仍然無濟於事。
任何存在未固定依賴項的地方,您都可能遇到這種情況。
這是一個例子。 假設您的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
中。
在如何識別和解決依賴沖突中有更多關於此的信息。
您還可以固定項目的所有 Python 依賴項,以確保任何其他依賴項不會再次發生這種情況,盡管您會為保證犧牲一些靈活性。
注意:我是 Divio 團隊的成員。 這個問題是我們經常通過我們的支持渠道看到的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.