python作為一門程式語言對用它開發的專案的版本格式沒有任何限制。實際上大多數的 python **根本沒有版本這個屬性。在 pep345 通過之前,專案版本的格式幾乎是無關緊要的。然而這個 pep345 給 disutils 模組增加了乙個 requrie-dist 屬性,試圖通過它和其他增改的屬性來解決不同 python 專案之間的依賴關係難以表述的問題。有了它,將來的專案可以通過原生的 python 環境來提供自己的安裝和解除安裝資訊,包括對其他專案的依賴。這樣 python 就獲得了類似 debian linux 下面 apt-get 工具的能力!"
這個 pep 的通過對 python 專案的使用者和開發者都是乙個好訊息。
那麼這個 pep 和版本號有什麼關係呢?答案是新增的 require-dist 屬性裡可以包含版本範圍的資訊(x專案以來y專案的版本不小於z)。而這個資訊自然會應用到版本大小的比較。如果乙個專案的版本格式是隨機的,那 python 專案的安裝工具就無法識別 require-dist 裡的版本範圍,從而無法通過比較版本大小來安裝專案的依賴包。所以作為乙個 python 開發者,如果想讓自己的專案能在將來順利安裝,最好還是從今天開始使用規範的版本系統和格式。
怎樣的版本格式才算規範呢?python 核心已經通過
pep386 為我們回答了這個問題。python 在將來能原生識別和比較的版本應該具有以下格式:
n.n[.n]+[n[.n]+][.postn][.devn]
從左向右做乙個簡單的解釋:
"n.n": 版本號裡唯一必備的部分,兩個"n"分別代表了主版本和副版本號,絕大多數現存的工程裡都包含該部分。
"[.n]": 次要版本號,可以有零或多個。
"": 階段代號,a, b, c, rc分別代表alpha, beta, candidate 和 release candidate, 可選
"n[.n]": 階段版本號,如果提供,則至少有一位主版本號,後面可以加無限多位的副版本號。
".postn": 發行後更新版本號,可選。
".devn": 開發期間的發行版本號,可選。
不難看出這個格式其實是建立在大多數既存專案已經普遍應用的格式的基礎之上的,這也是這個pep的提出者的初衷:盡量保持與現狀的相容性。
下面舉幾個規範版本格式的例子:
符合規範的版本號即使格式不同也能相互進行比較,pep386 裡面給的例子能說明很多問題:
>>> from verlib import normalizedversion as v
>>> (v('1.0a1')
... < v('1.0a2.dev456')
... < v('1.0a2')
... < v('1.0a2.1.dev456')
... < v('1.0a2.1')
... < v('1.0b1.dev456')
... < v('1.0b2')
... < v('1.0b2.post345')
... < v('1.0c1.dev456')
... < v('1.0c1')
... < v('1.0.dev456')
... < v('1.0')
... < v('1.0.post456.dev34')
... < v('1.0.post456'))
true
結果非常的符合直覺。至少 danmarner 是這麼覺得。
最後補充: 上面例子中的 verlib 還在開發階段,**在這裡 ,它將成為未來的 distutils.version 模組。 pep 386 是 python 和 ubuntu,fedora 一起提出的。
你的 python 專案有乙個符合 pep386 的版本嗎?
軟體專案版本命名規範
專案管理中必須注意軟體專案的命名規範 目前採用gnu 風格的版本號命名格式 主版本號 子版本號 修正版本號 編譯版本號 英文對照 major version number.minor version number revision number build number 示例 1.2.1,2.0,5...
軟體專案版本命名規範
from 目前採用gnu 風格的版本號命名格式 主版本號 子版本號 修正版本號 編譯版本號 英文對照 major version number.minor version number revision number build number 示例 1.2.1,2.0,5.0.0 build 131...
Python 專案版本格式
專案版本 pep 440 針對所有的python包引入了一種版本格式 pep440中定義版本號應該遵從以下正規表示式的格式 n n n n postn devn 它允許類似1.2或1.2.3這樣的格式,但需注意以下幾點 n n an 如1.2a1 表示乙個alpha版本,即此版本不穩定或缺少某些功能...