2017-10-19 72 views
5

偶然我注意到,Python標準庫的兩個csvre模塊具有其.__version__屬性:爲什麼在Python標準庫的某些模塊中有__version__字符串?

>>> import re, csv 
>>> re.__version__ 
'2.2.1' 
>>> csv.__version__ 
'1.0' 

我很驚訝,因爲他們是標準庫的一部分,所以我希望自己的版本被定義sys.version(和sys.version_info)。

我已經注意到儘管模塊已經改變,Python 2.7.13和3.6.1的屬性值都是相同的。

它們只是一種「代碼化石」,或者它們有點意義,程序員應該關注它們的價值嗎?

+1

我想你一個版本的庫混合的Python版本。例如,如果您使用Linux-3.16操作系統,那並不意味着您必須運行Firefox 3才能瀏覽網頁。版本號是* not * global。 –

+2

我想這不是一個答案,而是:*「在個案的基礎上,標準庫模塊也以其他Python版本的獨立形式發佈,如果包含在標準庫中,則可以包含模塊版本號,並且應該包括單獨打包的版本號。「*([source](https://www.python.org/dev/peps/pep-0396/#id25)) – vaultah

+0

此外,標準庫通常是包含特定的版本號。但包裝上的發展仍在繼續。所以你可以決定使用're'構建''版本'也許提供一些實驗性功能,但還沒有完全測試過將它包含在標準庫中。通常,標準庫旨在選擇或多或少*可靠*的高質量包。 –

回答

1

我可以假設C上模塊的源版本沒有改變,只有python模塊的源代碼在不同版本的python本身上發生了變化。在python資源庫中尋找源代碼可以解釋整個情況。

例如:

+0

這基本上是正確的。然而,'re'的版本目前似乎不同步:'re .__ version__'給出了2.2.1,但是're.sre_compile._sre.copyright'給出了2.2.2。 – ekhumoro

+0

@ekhumoro'sre'是在Python模塊're'中導入的C lib,它有它自己的版本,所以它們的版本可能不相同 –

+0

不,這些版本應該是相同的,這正是您在答案中給出的原因。我認爲有人忘記了在上一次C庫版本被碰撞時更新python模塊。 csv模塊直接從它的C庫獲得它的'__version__',所以它沒有這個潛在的問題。 – ekhumoro

相關問題