协慌网

登录 贡献 社区

如何检查 python 模块的版本?

我刚刚安装了 python 模块:使用setuptools constructstatlib

# Install setuptools to be able to download the following
sudo apt-get install python-setuptools

# Install statlib for lightweight statistical tools
sudo easy_install statlib

# Install construct for packing/unpacking binary data
sudo easy_install construct

我希望能够(以编程方式)检查其版本。我可以从命令行运行python --version

我的 python 版本是2.7.3

答案

我建议使用pip 代替 easy_install 。使用 pip,您可以列出所有已安装的软件包及其版本

pip freeze

在大多数 linux 系统中,您可以将其通过管道传递给grep (或findstr ),以找到您感兴趣的特定软件包的行:

Linux:
$ pip freeze | grep lxml
lxml==2.3

Windows:
c:\> pip freeze | findstr lxml
lxml==2.3

对于单个模块,可以尝试使用__version__属性,但是有些模块没有它:

$ python -c "import requests; print(requests.__version__)"
2.14.2
$ python -c "import lxml; print(lxml.__version__)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute '__version__'

最后,由于问题中的命令带有sudo前缀,因此您似乎正在安装到全局 python 环境。强烈建议您研究 python虚拟环境管理器,例如virtualenvwrapper

你可以试试

>>> import statlib
>>> print statlib.__version__

>>> import construct
>>> print contruct.__version__

更新:这是 PEP 396 建议的方法。但是 PEP 从未被接受并且已被推迟。实际上,Python 核心开发人员似乎越来越多地建议建议使用__version__属性,例如https://gitlab.com/python-devs/importlib_metadata/-/merge_requests/125 中

Python> = 3.8:

如果您使用的是 python >=3.8 ,则可以使用内置库中的模块。要检查包的版本(在本例中construct )运行:

>>> from importlib.metadata import version
>>> version('construct')
'4.3.1'

Python <3.8:

使用setuptoolspkg_resources分发的 pkg_resources 模块。请注意,传递给get_distribution方法的字符串应对应于 PyPI 条目。

>>> import pkg_resources
>>> pkg_resources.get_distribution('construct').version
'2.5.2'

旁注:

  1. 请注意,传递给get_distribution方法的字符串应该是在 PyPI 中注册的包名称,而不是您要导入的模块名称。不幸的是,这些并不总是相同的(例如,您要pip install memcached ,但要import memcache )。

  2. 如果要从命令行应用此解决方案,则可以执行以下操作:

python -c \
  "import pkg_resources; print(pkg_resources.get_distribution('construct').version)"