在開發Python套件時,如果需要相同相依性的不同版本,使用者可能會遇到依賴項衝突。例如,如果你的套件需要 requests==2.26.0,但使用者的系統需要 requests==2.25.1,則兩者不能共存,因為 Python 不允許同時安裝同一套件的多個版本。
避免依賴衝突的方法:
A. 供應商方法:
-
供應依賴項:這涉及直接在套件中包含必要的依賴項。它對於控製版本很有用,但可能會增加套件大小。
-
純 Python 套件:供應對於沒有自己的依賴項的純 Python 套件效果很好。
-
具有依賴關係的包:如果供應的包有自己的依賴關係,供應就會出現問題,從而導致潛在的衝突。
問題:
-
依賴項衝突:提供具有相依性的套件可能會導致使用者環境發生衝突。
-
版本控制:保持供應商依賴項的更新對於安全至關重要。
-
尺寸:供應商可以增加包裝尺寸。
範例:
-
場景 1:如果請求沒有依賴項,將其與您的套件捆綁在一起可確保使用正確的版本。
-
場景2:由於requests依賴像urllib3這樣的函式庫,如果其他套件需要不同版本的urllib3,包含它可能會導致衝突。
注意:如果您進行銷售,則需要遵守銷售政策。在這裡查看。
B. 虛擬環境方法:
- 依賴衝突通常是無法控制的,尤其是在第三方應用程式中,即使使用虛擬環境也是如此。
問題:
-
超出我們的控制:使用者如何設定虛擬環境超出我們的影響範圍。
-
第三方應用程式:即使在虛擬環境中,它們仍可能面臨衝突問題。
C. 分叉方法:
- 您可以分叉衝突的包,重命名它(例如,mypackage-requests==2.26.0),然後在包中使用分叉版本。
問題:
-
維護:分叉需要使用原始包更新分叉。
-
子依賴項:如果分叉的套件具有依賴項,您可能還需要分叉並管理它們。
結論:
每種方法都有其優點和挑戰,選擇取決於您的特定用例以及您想要對依賴項進行多少控制。根據經驗,最好透過正確維護套件來解決衝突,確保與更廣泛的 Python 生態系統的兼容性。
資源:
- 如何管理您的requirements.txt中衝突的套件?
- 供給政策
- python-vendorize
- 您對供應的包裹有何看法?
以上是Python套件衝突的詳細內容。更多資訊請關注PHP中文網其他相關文章!