[英]How pip determine a python package version
當我使用pip從源代碼安裝軟件包時,它將為該軟件包生成一個版本號,使用'pip show'可以看到該版本號。 但是我找不到該版本號的生成方式,也無法從源代碼中找到版本字符串。 有人可以告訴我該版本是如何生成的嗎?
pip
使用的版本號來自setup.py
(如果您pip install
文件,目錄,存儲庫等)和/或PyPI索引中的信息(如果pip install
軟件包名稱)。 (由於這兩個必須相同,所以實際上無關緊要。)
建議軟件包在運行時為其頂級模塊/軟件包提供與設置中相同的字符串作為__version__
屬性,但這不是必需的,並不是每個軟件包都這樣做。
而且,如果該軟件包未公開其版本,則實際上您沒有辦法獲得它。 (好吧,除非您想翻閱pip
數據以試圖找出哪個軟件包擁有一個模塊,然后獲取其版本。)
這是一個例子:
在bs4
(BeautifulSoup4)的源代碼中, setup.py
文件包含以下行:
version = "4.3.2",
那是pip
直接或間接使用的版本。
然后,在bs4/__init__.py
內部,有以下行:
__version__ = "4.3.2"
這意味着倫納德·理查森(Leonard Richardson)是一個遵循建議的好人,因此我可以import bs4; print(bs4.__version__)
import bs4; print(bs4.__version__)
並返回pip show beautifulsoup4
給我的相同版本字符串。
但是,正如您所看到的,它們是完全不同的文件中的兩個完全不同的字符串。 如果他不好,它們可能會完全不同,或者第二個可能會丟失,或者命名不同。
OpenStack人員想到了一個名為PBR的漂亮庫,可幫助您管理版本號。 您可以閱讀鏈接的文檔頁面以獲取全部詳細信息,但是基本思想是,它可以從git中為您生成完整的版本號,或者驗證您指定的版本號(在setup.cfg
的metadata
部分中)並附加git中的dev
版本號。 (這取決於您在git
repo中使用語義版本控制 。)
對於更復雜的字符串(例如4.0.0rc1
,通常可以在PKG-INFO
文件中手動對其進行編輯。 如:
# cat ./<package-name>.egg-info/PKG-INFO
...
Version: 4.0.0rc1
...
這使得從任何python代碼中獲取它都不可行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.