簡體   English   中英

我沒有更改我的 Divio 項目中的需求,那么為什么構建會因依賴項沖突而失敗?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM