如何检查 Python 模块的版本?

2025-02-28 08:23:00
admin
原创
56
摘要:问题描述:我安装了 Python 模块construct并statlib使用setuptools:sudo apt-get install python-setuptools sudo easy_install statlib sudo easy_install construct 如何从命令行检查它们的版...

问题描述:

我安装了 Python 模块constructstatlib使用setuptools

sudo apt-get install python-setuptools

sudo easy_install statlib
sudo easy_install construct

如何从命令行检查它们的版本?


解决方案 1:

使用pip而不是easy_install

使用 pip,通过以下方式列出所有已安装的软件包及其版本:

pip freeze

在大多数 Linux 系统上,您可以将其通过管道传输到grep(或findstr在 Windows 上)以查找您感兴趣的特定包的行。


Linux:

pip freeze | grep lxml

lxml==2.3

视窗:

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__)"

回溯(最近一次调用最后一次):

文件“<string>”,第 1 行,位于 <module>

AttributeError:'module' 对象没有属性' version '

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

解决方案 2:

你可以尝试

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

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

这是PEP 396推荐的方法。但该 PEP 从未被接受并被推迟。事实上,Python 核心开发人员似乎越来越多地支持包含__version__属性,例如在Remove importlib_metadata中。版本

解决方案 3:

Python> = 3.8:

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

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

Python <3.8:

使用随库pkg_resources分发的模块setuptools。请注意,传递给方法的字符串get_distribution应与 PyPI 条目相对应。

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

附注:

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

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

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

解决方案 4:

用于pip show查找版本!

# In order to get the package version, execute the below command
pip show YOUR_PACKAGE_NAME | grep Version

您可以使用pip show YOUR_PACKAGE_NAME- 来获取软件包的所有详细信息。这在 Windows 中也有效。

grep Version用于在Linux中过滤出版本并显示。

解决方案 5:

更好做法是:


有关特定套餐的详细信息

pip show <package_name>

它详细说明了软件包的名称、版本、作者、位置等。


$ pip show numpy

Name: numpy
Version: 1.13.3
Summary: NumPy: array processing for numbers, strings, records, and objects.
Home-page: http://www.numpy.org
Author: NumPy Developers
Author-email: numpy-discussion@python.org
License: BSD
Location: c:/usersprowinjvmappdatalocalprogramspythonpython36libsite-packages
Requires:

更多详细信息:>>> pip help


pip应进行更新以执行此操作。

pip install --upgrade pip

在 Windows 上,推荐的命令是:

python -m pip install --upgrade pip

解决方案 6:

在 Python 3 中,使用括号括起来打印:

>>> import celery
>>> print(celery.__version__)
3.1.14

解决方案 7:

在Python 3.8版本中,包中有一个新的metadata模块importlib,它也可以做到这一点。

以下是文档中的一个示例:

>>> from importlib.metadata import version
>>> version('requests')
'2.22.0'

解决方案 8:

module.__version__是一个很好的尝试,但它并不总是有效。

如果你不想花钱,并且正在使用 pip 8 或 9,你仍然可以使用它pip.get_installed_distributions()从 Python 内部获取版本:

此处的解决方案适用于 pip 8 和 9,但在 pip 10 中,该函数已从 移至 ,pip.get_installed_distributionspip._internal.utils.misc.get_installed_distributions明确表明它不供外部使用。如果您使用的是 pip 10+,则依赖它不是一个好主意。

import pip

pip.get_installed_distributions()  # -> [distribute 0.6.16 (...), ...]

[
    pkg.key + ': ' + pkg.version
    for pkg in pip.get_installed_distributions()
    if pkg.key in ['setuptools', 'statlib', 'construct']
] # -> nicely filtered list of ['setuptools: 3.3', ...]

解决方案 9:

先前的答案没有解决我的问题,但是此代码解决了:

import sys 
for name, module in sorted(sys.modules.items()): 
  if hasattr(module, '__version__'): 
    print name, module.__version__ 

解决方案 10:

用于dir()查明模块是否具有__version__属性。

>>> import selenium
>>> dir(selenium)
['__builtins__', '__doc__', '__file__', '__name__',
 '__package__', '__path__', '__version__']
>>> selenium.__version__
'3.141.0'
>>> selenium.__path__
['/venv/local/lib/python2.7/site-packages/selenium']

解决方案 11:

您可以尝试这个:

pip list

这将输出所有包及其版本。

输出

解决方案 12:

有些模块没有__version__属性,所以最简单的方法是在终端中检查:pip list

解决方案 13:

如果前面答案中的方法不起作用,那么值得在 Python 中尝试以下步骤:

import modulename

modulename.version
modulename.version_info

请参阅获取 Python Tornado 版本

请注意,除了Tornado.version之外,它还对我在其他一些产品上也起到了作用。

解决方案 14:

假设我们正在使用Jupyter Notebook(如果使用终端,请删除感叹号):

  1. 如果使用pip安装软件包(例如 xgboost):

!pip show xgboost
!pip freeze | grep xgboost
!pip list | grep xgboost
  1. 如果软件包(例如caffe )是使用Conda安装的:

!conda list caffe

解决方案 15:

此答案适用于 Windows 用户。正如所有其他答案中所建议的那样,您可以将语句用作:

import [type the module name]
print(module.__version__) # module + '.' + double underscore + version + double underscore

但是,有些模块即使使用上述方法也不会打印其版本。因此,您可以简单地执行以下操作:

  1. 打开命令提示符。

  2. 使用cd文件地址)导航到保存 Python 和所有支持模块的文件地址/目录。如果您的系统上只有一个 Python 解释器,则PyPI包通常会显示在目录/文件夹中:PythonLibsite-packages

  3. 使用命令“ pip install [模块名称] ”并点击Enter

  4. 这将向您显示一条消息“要求已满足:文件地址\文件夹名称(带版本) ”。

  5. 例如,请看下面的截图:我必须知道名为“Selenium-Screenshot”的预安装模块的版本。它正确显示为 1.5.0:

命令提示符屏幕截图

解决方案 16:

进入 pycharm-terminal 等终端

现在写入pypython
并按Enter

现在您在终端中的 Python 中,您可以尝试以下方法:

# import <name_of_the_library>

import kivy

# So if the library has __version__ magic method, so this way will help you

kivy.__version__  # then hit Enter to see the version

# Output >> '2.1.0'

但是如果上述方法不起作用,您可以尝试这种方法来了解包括库版本在内的信息

 pip show module <HERE PUT THE NAME OF THE LIBRARY>

例子:

pip show module pyperclip

Output:
       Name: pyperclip
       Version: 1.8.2
       Summary: A cross-platform clipboard module for Python. (Only handles plain text for now.)
       Home-page: https://github.com/asweigart/pyperclip
       Author: Al Sweigart
       Author-email: al@inventwithpython.com
       License: BSD
       Location: c:ckivymdirtlibsite-packages
       Requires:
       Required-by:

还有另一种方法可以帮助您显示项目内的所有库及其版本:

pip freeze
# I used the above command in a terminal inside my project this is the output
       certifi==2021.10.8
       charset-normalizer==2.0.12
       docutils==0.18.1
       idna==3.3
       Kivy==2.1.0
       kivy-deps.angle==0.3.2
       kivy-deps.glew==0.3.1
       kivy-deps.sdl2==0.4.5
       Kivy-Garden==0.1.5
       kivymd @ file:///C:/c/kivymd/KivyMD
       Pillow==9.1.0
       Pygments==2.12.0
       pyperclip==1.8.2
       pypiwin32==223
       pywin32==303
       requests==2.27.1
       urllib3==1.26.9

当然,您可以尝试使用以下命令来显示所有库及其版本

pip list

希望对大家有所帮助,问候

解决方案 17:

我建议在终端中打开一个 Python shell(在您感兴趣的 Python 版本中),导入库并获取其__version__属性。

>>> import statlib
>>> statlib.__version__

>>> import construct
>>> contruct.__version__

注意 1:我们必须考虑Python 版本。如果我们安装了不同版本的 Python,则必须使用我们感兴趣的 Python 版本打开终端。例如,使用 Python 3.8 打开终端可以(肯定会)给出与使用 Python 3.5 或 Python 2.7 打开终端不同的库版本。

注2:我们避免使用print函数,因为它的行为依赖于Python 2或Python 3。我们不需要它,终端将显示表达式的值。

解决方案 18:

首先将可执行文件python和添加pip到环境变量中。这样您就可以从命令提示符执行命令。然后只需输入 Python 命令即可。

然后导入包:

import scrapy

然后打印版本名称

print(scrapy.__version__)

这一定会起作用。

解决方案 19:

总之:

conda list

(它将提供所有库以及版本详细信息。)

和:

pip show tensorflow

(它提供了完整的图书馆详细信息。)

解决方案 20:

如果你需要检查任何软件包的已安装版本,你可以简单地使用下面的 Pip 命令

模板

pip show <PACKAGE_NAME> | grep Version or pip show <PACKAGE_NAME>

使用 pip3

 pip3 show <PACKAGE_NAME> | grep Version or pip3 show <PACKAGE_NAME>

例子

pip show PyYAML | grep Version
Version: 3.12



pip3 show PyYAML | grep Version
Version: 3.12

解决方案 21:

这也适用于Windows 上的Jupyter Notebook!只要从兼容 Bash 的命令行(如Git Bash ( Mingw-w64 ) )启动 Jupyter,只需进行微小调整,许多答案中给出的解决方案就可以在 Windows 系统上的 Jupyter Notebook 中使用。

我正在运行 Windows 10 Pro,并通过Anaconda安装了 Python ,当我通过 Git Bash 启动 Jupyter 时,以下代码有效(但从 Anaconda 提示符启动时无效)。

!调整方法:在 前面添加感叹号 ( )pip使其成为!pip

>>>!pip show lxml | grep Version
Version: 4.1.0

>>>!pip freeze | grep lxml
lxml==4.1.0

>>>!pip list | grep lxml
lxml                               4.1.0

>>>!pip show lxml
Name: lxml
Version: 4.1.0
Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
Home-page: http://lxml.de/
Author: lxml dev team
Author-email: lxml-dev@lxml.de
License: BSD
Location: c:/userskarlsanaconda2libsite-packages
Requires:
Required-by: jupyter-contrib-nbextensions

解决方案 22:

在搜索了互联网之后,试图弄清楚如何确保我正在运行的模块的版本(显然python_is_horrible.__version__不是 Python 2 中的东西?)跨操作系统和 Python 版本......实际上这些答案都不适合我的情况......

然后我思考了一会儿并意识到了基本原理......经过约 30 分钟的失败......

假设模块已经安装并可以导入


Python 3.7

>>> import sys,sqlite3
>>> sys.modules.get("sqlite3").version
'2.6.0'
>>> ".".join(str(x) for x in sys.version_info[:3])
'3.7.2'

Python 2.7

>>> import sys,sqlite3
>>> sys.modules.get("sqlite3").version
'2.6.0'
>>> ".".join(str(x) for x in sys.version_info[:3])
'2.7.11'

从字面上看就是这样...

解决方案 23:

对于__version__未定义字段的情况:

try:
    from importlib import metadata
except ImportError:
    import importlib_metadata as metadata # python<=3.7

metadata.version("package")

或者,就像已经提到的那样:

import pkg_resources
pkg_resources.get_distribution('package').version

解决方案 24:

(另请参阅如何以编程方式获取 Python 中已安装模块的版本?

我发现使用各种可用的工具(包括Jakub Kukul 的回答pkg_resources中提到的最好的工具)非常不可靠,因为它们中的大多数并不能涵盖所有情况。例如

  • 内置模块

  • 模块未安装但已添加到 Python 路径(例如由您的 IDE 添加)

  • 同一模块有两个可用版本(python 路径中的一个版本取代已安装的版本)

由于我们需要一种可靠的方法来获取任何包、模块或子模块的版本,我最终编写了getversion。 它使用起来非常简单:

from getversion import get_module_version
import foo
version, details = get_module_version(foo)

有关详细信息,请参阅文档。

解决方案 25:

一个列出所有包的 Python 程序(你可以将其复制到文件requirements.txt):

from pip._internal.utils.misc import get_installed_distributions
print_log = ''
for module in sorted(get_installed_distributions(), key=lambda x: x.key):
    print_log +=  module.key + '~=' + module.version  + '
'
print(print_log)

输出结果如下:

asn1crypto~=0.24.0
attrs~=18.2.0
automat~=0.7.0
beautifulsoup4~=4.7.1
botocore~=1.12.98

解决方案 26:

获取当前模块中导入的非标准(pip)模块列表:

[{pkg.key : pkg.version} for pkg in pip.get_installed_distributions() 
   if pkg.key in set(sys.modules) & set(globals())]

结果:

>>> import sys, pip, nltk, bs4
>>> [{pkg.key : pkg.version} for pkg in pip.get_installed_distributions() if pkg.key in set(sys.modules) & set(globals())]
[{'pip': '9.0.1'}, {'nltk': '3.2.1'}, {'bs4': '0.0.1'}]

笔记:

该代码是根据本页面和如何列出导入的模块的解决方案汇总而成的。

解决方案 27:

这是一个小型 Bash 程序,用于获取 Python 环境中任何包的版本。只需将其复制到您的环境中/usr/bin并为其提供可执行权限:

#!/bin/bash
packageName=$1

python -c "import ${packageName} as package; print(package.__version__)"

然后您可以在终端中运行它,假设您将脚本命名为py-check-version

py-check-version whatever_package

解决方案 28:

如果你的生产系统已经强大到难以想象,既没有pip也没有conda,那么这里有一个 Bash 替代品pip freeze

ls /usr/local/lib/python3.8/dist-packages | grep info | awk -F "-" '{print $1"=="$2}' | sed 's/.dist//g'

(确保将dist-packages文件夹更新为当前的 python 版本并忽略不一致的名称,例如下划线与破折号)。

打印输出样例:

Flask==1.1.2
Flask_Caching==1.10.1
gunicorn==20.1.0
[..]

解决方案 29:

我自己在一个严格限制的服务器环境中工作,不幸的是,这里的所有解决方案都不适合我。可能没有适合所有人的全局解决方案,但我通过读取脚本中 pip freeze 的终端输出并将模块标签和版本存储在字典中找到了快速的解决方法。

import os
os.system('pip freeze > tmpoutput')
with open('tmpoutput', 'r') as f:
    modules_version = f.read()
  
module_dict = {item.split("==")[0]:item.split("==")[-1] for item in modules_versions.split("
")}

通过传递模块标签键来检索模块的版本,例如:

>>  module_dict["seaborn"]
'0.9.0'

解决方案 30:

基于Jakub Kukul 的回答,我找到了一种更可靠的方法来解决这个问题。

该方法的主要问题是要求以“常规方式”安装包(不包括使用pip install --user),或者在 Python 初始化时将其放在系统 PATH 中。

要解决这个问题,您可以使用pkg_resources.find_distributions(path_to_search)。这基本上会搜索path_to_search在系统 PATH 中可导入的发行版。

我们可以像这样迭代这个生成器:

avail_modules = {}
distros = pkg_resources.find_distributions(path_to_search)
for d in distros:
    avail_modules[d.key] = d.version

这将返回一个以模块为键、以模块版本为值的字典。这种方法可以扩展到比版本号更多的领域。

感谢 Jakub Kukul 指明正确的方向。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3740  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2617  
  敏捷每日站会作为敏捷项目管理中的关键环节,对于提升产品生命周期管理(PLM)效率有着不可忽视的作用。PLM涵盖了产品从概念产生到最终报废的全过程管理,涉及众多环节与人员,而每日站会能够通过优化沟通机制,让信息在团队中快速、准确地流动,从而推动整个PLM流程更加顺畅、高效。接下来,我们将深入探讨如何通过四步优化沟通机制,...
plm系统   91  
  在企业的发展进程中,产品生命周期管理(PLM)项目管理至关重要,而数据驱动决策则是提升PLM项目管理效能的关键手段。通过运用合适的分析模型,企业能够从海量数据中挖掘有价值的信息,为决策提供有力支撑,进而优化产品全生命周期的各个环节。以下将详细介绍助力PLM项目管理实现数据驱动决策的5大分析模型。需求分析模型需求分析是P...
plm系统功能介绍   94  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与运营中扮演着至关重要的角色。它涵盖了从产品概念设计到退役的全流程管理,确保产品数据的有效整合与协同。然而,在复杂多变的商业环境中,黑天鹅事件随时可能降临,给企业带来难以预估的冲击。这些意外事件具有不可预测性、极大的影响力和事后的可解释性等特点,会对PLM系统的正常运...
plm系统的主要功能模块   92  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用