pip 如何确定 python 包版本

tvb*_*nct 4 python pip

当我使用 pip 从源代码安装软件包时,它将生成该软件包的版本号,我可以使用“pip show”查看该版本号。但我无法找出该版本号是如何生成的,也无法从源代码中找到版本字符串。有人能告诉我版本是如何生成的吗?

aba*_*ert 5

使用的版本号pip来自setup.py(如果您pip install是文件、目录、存储库等)和/或 PyPI 索引中的信息(如果您pip install包名称)。(由于这两个必须相同,所以哪个并不重要。)

建议软件包将相同的字符串用作__version__在运行时在其顶级模块/包上将相同的字符串用作其设置中的属性,但这不是必需的,而且并非每个包都这样做。

如果包没有公开它的版本,那么您实际上就没有办法获取它。(好吧,除非你想通过pip数据来找出哪个包拥有一个模块,然后获取它的版本。)


这是一个例子:

bs4在(BeautifulSoup4)的源代码中,该setup.py文件有以下行:

version = "4.3.2",
Run Code Online (Sandbox Code Playgroud)

这是 直接或间接使用的版本pip。

然后,在里面bs4/__init__.py有这样一行:

__version__ = "4.3.2"
Run Code Online (Sandbox Code Playgroud)

这意味着 Leonard Richardson 是一个遵循建议的好人,因此我可以import bs4; print(bs4.__version__)取回pip show beautifulsoup4给我的相同版本字符串。

但是,正如您所看到的,它们是完全不同文件中的两个完全不同的字符串。如果他不友善,它们可能会完全不同,或者第二个可能会丢失,或者命名为不同的东西。


OpenStack 人员想出了一个名为PBR的漂亮库,可以帮助您管理版本号。您可以阅读链接的文档页面以获取完整的详细信息,但基本思想是,它要么从 git 中为您生成完整的版本号,要么验证您指定的版本号(在 的 部分中metadata)setup.cfg并附加dev构建号git。(这取决于您在存储库中使用语义版本git控制。)