pip如何确定python包版本

时间:2015-05-11 03:26:01

标签: python pip

当我使用pip从源代码安装软件包时,它会为软件包生成一个版本号,我可以使用'pip show'查看。但我不知道如何生成该版本号,我无法从源代码中找到版本字符串。有人能告诉我版本是如何生成的吗?

2 个答案:

答案 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代码中获取它都不可行。