成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python中的依賴關系處理

開發 后端
對許多人來說,依賴關系是一場噩夢。一些人甚至認為它們是技術債務。管理你的軟件的庫列表是一種可怕的體驗。自動更新依賴項?-這聽起來像是在說胡話。

對許多人來說,依賴關系是一場噩夢。一些人甚至認為它們是技術債務。管理你的軟件的庫列表是一種可怕的體驗。自動更新依賴項?-這聽起來像是在說胡話。

[[277528]]

請繼續關注我,因為我將幫助你更好地掌握一些你在實踐中無法擺脫的東西——除非你非常富有和有才華,能夠在沒有他人代碼的情況下生活。

首先,我們需要清楚地了解一些有關依賴關系的知識: 依賴關系有兩種類型。Donald Stuff幾年前寫的關于這個主題的文章比我要寫的都好。簡單一點來說,它們是依賴于外部代碼的兩種類型的代碼包:應用程序和庫。

庫依賴

Python庫應該以一種通用的方式來指定它們的依賴關系。一個庫不應該要求requests 2.1.5:這沒有意義。如果每個庫都需要不同版本的requests,我們就不能同時使用它們。

庫需要根據版本號的范圍來聲明依賴關系。要求請求requests>=2是正確的。如果你知道requests2.x不適用于該庫,那么要求 requests>=1,<2 也是正確的。你的版本范圍定義正在解決的問題是你的代碼和依賴項之間的API兼容性問題———沒有其他問題。這是庫盡可能使用語義版本控制的一個很好的理由。

因此,依賴關系應該寫在setup.py中,類似于:

Python中的依賴關系處理

這樣,任何應用程序都可以輕松地使用庫并與其他應用程序共存。

應用程序依賴關系

應用程序只是庫的一種特殊情況。它們不打算被其他應用程序庫重用(導入)——盡管在實踐中沒有什么可以阻止它。

最后,這意味著你應該像為一個庫指定依賴關系一樣來在應用程序的setup.py中指定依賴關系。

其主要區別在于,一個應用程序通常部署在生產環境中以提供其服務。部署需要是可復用的。為此,你不能僅僅依賴于setup.py:因為請求的依賴關系范圍太寬。在重新部署應用程序時,你希望隨時都可以隨意更改版本。

因此,你需要一個不同的版本管理機制來處理部署,而不僅僅是setup.py。

pipenv在其文檔中有一節很好地總結了這一點。它將依賴關系類型劃分為抽象依賴項和具體依賴項: 抽象依賴項基于范圍(例如 庫),而具體依賴項是用精確的版本(例如應用程序部署)指定的——正如我們在這里看到的。

處理部署

requirements.txt文件長期以來一直被用來解決應用程序部署的可復用性問題。它的格式通常是這樣的:

Python中的依賴關系處理

每個庫都將自己指定為微版本。這確保你的每個部署都將安裝相同版本的依賴項。使用requirements.txt是一個簡單的解決方案,也是實現可復用部署的第一步。然而,這還不夠。

實際上,雖然你可以指定你想要的requests的版本,但是如果requests依賴于urllib3,那么這將會使pip安裝urllib 2.1或urllib 2.2。你無法知道哪一個會被安裝,這并不能使你的部署100%可重用。

當然,你可以在你的requirements.txt中復制所有的requests依賴項,但那將是瘋狂的做法!

[[277530]]

一個應用程序依賴關系樹有時可能非常深入和復雜。

有各種各樣的技巧可以用來修復這個限制,但是真正的救星是pipenv和poetry。它們解決這個問題的方法類似于其他編程語言中的許多包管理器。它們生成一個鎖文件,其中包含所有已安裝的依賴項(以及它們自己的依賴項等)的列表和版本號。這可以確保部署是100%可復用的。

請查看它們的文檔,了解如何設置和使用它們!

處理依賴項更新

現在,你已經有了鎖文件,它可以確保你的部署在短時間內是可復用的,那么你就有了另一個問題。你如何確保你的依賴項是最新的?這是一個真正的安全問題,而且保持版本落后的話,你可能也會錯過bug修復和進行優化的機會。

如果你的項目托管在GitHub上,Dependabot是解決這個問題的一個很好的解決方案。當你的鎖文件中列出的庫的一個新版本可用時,在存儲庫上啟用此應用程序將會自動創合并請求。例如,如果你已經使用redis 3.3.6部署了你的應用程序,當新版本redis 3.3.7發布時,Dependabot將會創建一個更新到redis 3.3.7的合并請求。此外,Dependabot還支持requirements.txt、 pipenv和poetry!

Python中的依賴關系處理

Dependabot正在為你更新jinja2

自動部署更新

快要成功了。你有一個機器人,它讓你知道你的項目需要的一個庫的新版本是可用的。

一旦創建了合并請求,你的持續集成系統就會啟動、部署你的項目并運行測試。如果一切正常,你的合并請求就可以被合并了。但是在這個過程中真的需要你參與嗎?

除非你個人特別反感某個特定的版本號——“天哪,我討厭以3結尾的版本。遇見它總是運氣不好。——或者除非你沒有自動化測試,否則你,人類,是無用的。這個合并完全可以是自動化的。

這就是Mergify發揮作用的地方。Mergify是一個GitHub應用程序,它允許你定義關于如何合并合并請求的精確規則。下面是我在每個項目中都使用的一個規則:

Python中的依賴關系處理

當規則完全匹配時,Mergify會進行報告。

一旦你的持續集成系統通過,Mergify就會為你合并該合并請求。

Python中的依賴關系處理

然后,你就可以自動觸發你的部署鉤子來更新你的生產部署,并立即安裝新的庫版本。這將使得你的應用程序總是使用較新的庫進行更新,并且不會落后于幾年的發行版。

如果出現任何錯誤,你仍然能夠從Dependabot中恢復提交——如果你希望使用一個Mergify規則,你也可以自動化恢復提交。

題外話

對我來說,這就是依賴關系管理生命周期目前的狀態。雖然這對Python非常適用,但它也可以應用于使用了類似模式的許多其他語言,比如Node和npm。

責任編輯:華軒 來源: Python部落
相關推薦

2010-07-09 10:36:14

UML類圖關系

2010-07-08 14:58:29

UML類圖關系

2010-07-08 15:28:39

UML類圖依賴關系

2023-08-07 11:47:53

Poetry工具軟件包

2024-09-29 15:32:13

自動化測試開發

2018-04-10 15:44:31

Gradle依賴關系異常

2010-06-29 13:11:40

UML類圖依賴關系

2024-04-15 07:00:00

Python開發Hatch

2021-03-16 09:23:25

VueMixin模塊

2022-12-29 08:54:53

依賴注入JavaScript

2010-06-29 12:55:44

UML類圖依賴關系

2024-01-11 16:02:38

OHOS依賴關系檢查編譯構建系統

2010-06-12 15:21:19

UML關聯

2010-06-13 09:42:05

UML依賴

2017-11-07 13:24:38

Pythontime模塊datetime

2010-08-09 14:01:22

關系法則

2009-06-04 10:34:19

Hibernate一對一對多關系配置

2010-06-13 09:18:28

UML依賴

2010-07-09 15:29:51

UML類關系

2024-03-01 18:37:39

Spring傳遞性Maven
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伊人激情综合网 | 精品国产乱码久久久久久久久 | 久久久久精 | 精品国产乱码久久久久久丨区2区 | 黄色片免费 | 亚洲91视频 | 亚洲天堂久久 | 亚洲成人国产综合 | 成人av高清在线观看 | 国产欧美一区二区三区在线播放 | 中文字幕乱码一区二区三区 | 老牛影视av一区二区在线观看 | 久久福利电影 | 中文字幕不卡在线观看 | 五月精品视频 | 国产精品日韩欧美一区二区三区 | 国产精品自在线 | 亚洲国产成人精品一区二区 | 五月天综合影院 | 91精品久久久久久久久中文字幕 | 欧美日韩国产一区二区三区 | 亚洲一区二区久久 | 国产精品一区二区在线 | 国产亚洲二区 | 我想看国产一级毛片 | heyzo在线| 久久在线看 | 天天干天天爱天天操 | 91一区| 人人澡人人爱 | 国产精品毛片av一区 | 青娱乐自拍| 91精品国产一区二区 | 日韩蜜桃视频 | 在线中文一区 | www.国产 | а天堂中文最新一区二区三区 | 成人不卡视频 | 国产精品久久久久久久久久免费看 | 亚洲aⅴ精品 | 精品国产欧美一区二区 |