簡體   English   中英

pip如何確定python軟件包版本

[英]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.cfgmetadata部分中)並附加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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM