如果未设置_version _变量,如何检查python包的版本

如果未设置_version _变量,如何检查python包的版本,python,pip,pyodbc,Python,Pip,Pyodbc,我正在使用pyodbc,我想知道我正在使用的版本。 显然,我不能使用pyodbc.\uuuuu version\uuuu,因为可能没有设置变量 除此之外,我如何才能确定软件包的版本 您可以使用此命令(从终端) 对于pip(debian、ubuntu)的安装: 它确实有版本信息,只需使用。version: In [4]: pyodbc.version Out[4]: '3.0.10' pip show命令也会为您提供: In [54]: pip.main(["show","pyodbc"]) -

我正在使用
pyodbc
,我想知道我正在使用的版本。 显然,我不能使用
pyodbc.\uuuuu version\uuuu
,因为可能没有设置变量

除此之外,我如何才能确定软件包的版本

您可以使用此命令(从终端)

对于pip(debian、ubuntu)的安装:


它确实有版本信息,只需使用
。version

In [4]: pyodbc.version
Out[4]: '3.0.10'
pip show命令也会为您提供:

In [54]: pip.main(["show","pyodbc"])
---
Metadata-Version: 1.1
Name: pyodbc
Version: 3.0.10
Summary: DB API Module for ODBC
Home-page: http://code.google.com/p/pyodbc
Author: Michael Kleehammer
Author-email: michael@kleehammer.com
License: MIT
Location: /usr/local/lib/python2.7/dist-packages
Requires: 
Classifiers:
  Development Status :: 5 - Production/Stable
  Intended Audience :: Developers
  Intended Audience :: System Administrators
  License :: OSI Approved :: MIT License
  Operating System :: Microsoft :: Windows
  Operating System :: POSIX
  Programming Language :: Python
  Programming Language :: Python :: 2
  Programming Language :: Python :: 3
  Topic :: Database
Out[54]: 0
您可以重定向stdout并解析输出:

import pip
import sys

if sys.version_info.major >= 3:
    from io import StringIO
else:
    from StringIO import StringIO


def get_version(package):
    f = StringIO()
    sys.stdout = f
    pip.main(["show", package])
    sys.stdout = sys.__stdout__
    return next((line.split(":", 1)[1].strip()
                 for line in f.getvalue().splitlines() if line.startswith("Version")), "No match")
但更简单的方法是使用
pkg_资源
,如果查看源代码,您可以看到它是如何收集的:

from pip._vendor import pkg_resources

def get_version(package):
    package = package.lower()
    return next((p.version for p in pkg_resources.working_set if p.project_name.lower() == package), "No match")
要使用它,只需传递包名:

In [57]: get_version("pyodbc")
Out[57]: '3.0.10'

In [58]: get_version("pandas")
Out[58]: '0.17.1'

In [59]: get_version("requests")
Out[59]: '2.9.1'

In [60]: get_version("foobar")
Out[60]: 'No match'

您可以使用与show命令类似的逻辑轻松地对其进行扩展以获取不同的信息。

要获取有关模块的简短报告,包括其版本,请运行:

pip show pyodbc


在命令提示符下(例如Windows
cmd
)。这甚至适用于没有“版本”属性的模块。

转到开始-->cmd-->pip列表


它列出了您使用版本安装的所有软件包

,当时我以为自己有了新发现;)我不确定我应该接受哪一个答案,对于linux用户来说,秒更通用,而第一个解决了每个人的问题,但它只回答了特定软件包的问题@Padraic的第一个答案最适合你的问题。我不知道,因为我不使用pyodbc:)
pkg\u参考资料
方法是正确的通用方法。有时存在不同名称的版本方法。导入包后,您可以使用
dir()
查看哪些方法可用(如
。\uuuuu version\uuuuu
)。其他常见的是
.version
.version
。我认为这是一个鼓吹,但不能立即记住,并不是每个包都坚持它。
from pip._vendor import pkg_resources

def get_version(package):
    package = package.lower()
    return next((p.version for p in pkg_resources.working_set if p.project_name.lower() == package), "No match")
In [57]: get_version("pyodbc")
Out[57]: '3.0.10'

In [58]: get_version("pandas")
Out[58]: '0.17.1'

In [59]: get_version("requests")
Out[59]: '2.9.1'

In [60]: get_version("foobar")
Out[60]: 'No match'