当我使用pip从源代码安装软件包时,它会为软件包生成一个版本号,我可以使用'pip show'查看。但我不知道如何生成该版本号,我无法从源代码中找到版本字符串。有人能告诉我版本是如何生成的吗?
答案 0 :(得分:3)
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__)
并找回pip show beautifulsoup4
给我的相同版本字符串。
但是,正如您所看到的,它们在完全不同的文件中是两个完全不同的字符串。如果他不好,他们可能会完全不同,或者第二个可能会丢失,或命名不同。
OpenStack人员提出了一个名为PBR的漂亮库,可以帮助您管理版本号。您可以阅读链接的文档页面以获取完整的详细信息,但基本的想法是它可以从git中为您生成整个版本号,或者验证您指定的版本号(在{{1}的metadata
部分中并且从git中追加setup.cfg
内部版本号。 (这取决于您在dev
回购中使用Semantic Versioning。
答案 1 :(得分:0)
对于更复杂的字符串,例如4.0.0rc1
,通常可以在PKG-INFO
文件中进行手工编辑。如:
# cat ./<package-name>.egg-info/PKG-INFO
...
Version: 4.0.0rc1
...
这使得从任何python代码中获取它都不可行。