Answers:
使用pkg_resources。从PyPI安装的所有内容至少应具有版本号。
>>> import pkg_resources
>>> pkg_resources.get_distribution("blogofile").version
'0.7.1'
pkg_resources
可能会选择其他版本来遮盖实际运行的版本,因为它在您PYTHONPATH
或类似的文件上具有更高的优先级。
__version__
属性设置:stackoverflow.com/q/17583443/562769
pkg_resources
链接是错误404
一些想法:
您可以importlib_metadata
为此使用库。
如果您使用的是python < 3.8
,请首先使用以下命令进行安装:
pip install importlib_metadata
从python开始,3.8
它就包含在python的标准库中。
然后,要检查软件包的版本(在本示例中为lxml
),请运行:
>>> from importlib_metadata import version
>>> version('lxml')
'4.3.1'
请记住,这仅适用于从PyPI安装的软件包。同样,您必须将包名称作为version
方法的参数传递,而不是此包提供的模块名称(尽管它们通常是相同的)。
我发现使用各种可用的工具(包括此其他答案中pkg_resources
提到的最好的一种)非常不可靠,因为它们中的大多数都不能涵盖所有情况。例如
由于我们需要一种可靠的方法来获取任何软件包,模块或子模块的版本,因此我最终编写了getversion。使用起来非常简单:
from getversion import get_module_version
import foo
version, details = get_module_version(foo)
有关详细信息,请参见文档。
对于不提供__version__
以下功能但可以使用的模块:
#!/usr/bin/env python3.6
import sys
import os
import subprocess
import re
sp = subprocess.run(["pip3", "show", "numpy"], stdout=subprocess.PIPE)
ver = sp.stdout.decode('utf-8').strip().split('\n')[1]
res = re.search('^Version:\ (.*)$', ver)
print(res.group(1))
要么
#!/usr/bin/env python3.7
import sys
import os
import subprocess
import re
sp = subprocess.run(["pip3", "show", "numpy"], capture_output=True)
ver = sp.stdout.decode('utf-8').strip().split('\n')[1]
res = re.search('^Version:\ (.*)$', ver)
print(res.group(1))