語義化版本

weixin_33728268發表於2018-12-21

在使用pip(python),webpack(js)等包管理工具的時候,經常需要約束第三方軟體包的版本,比如在使用python的包管理工具pip的時候,常用做法是把第三方依賴包的版本都放入requirements.txt這個檔案中,這樣再次在其他環境安裝應用程式的時候就可以使用一行命令(pip install -r requirements.txt)自動下載相關依賴。而檔案中的內容就是這篇文章的重點:如何約束包的版本。


先看一個requirements.txt例子

django<2
ldap~=1.0.2
django_auth_ldap~=1.7
requests~=2.19
simplejson~=3.16
marathon~=0.10
ldap3~=2.5

我們可以清晰的看到左側是包(package)的名字,中間是約束規則,右側是版本號。

包的名字和版本不難理解,中間的這些符號是什麼意思呢?
就說一些簡單常用的把。

  • : 依賴包的版本大於某個版本

  • <: 依賴包的版本小於某個版本
  • ~=: 依賴包的版本約等於某個版本
  • ==: 依賴包的版本等於某個版本

除了~=之外都不難理解,所謂的約等於是指大致的版本號滿足要求即可。
比如一個依賴包名為xxx的版本為2.5.2,如果你的約束條件是 xxx~=2.5,這樣也是滿足條件的。
如果懂得正規表示式的話就更好理解了,相當於2.5.*,意思是說只要是2.5開頭的版本都可以。

我說的這些是工作中用到的,僅僅是皮毛,想了解更多語義化版本的問題可以看下面的網站。
傳送門:語義化版本

相關文章