如果没有设置__version__变量,如何检查python包的版本

时间:2016-03-29 11:54:27

标签: python pip pyodbc

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

我怎么能弄清楚包的版本?

4 个答案:

答案 0 :(得分:18)

它有版本信息,只需使用Error Message: string does not contain a definition of Where, and the method overload contains invalid arguments.

.version

pip show命令也可以为你提供:

In [4]: pyodbc.version
Out[4]: '3.0.10'

您可以重定向stdout并解析输出:

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

但更简单的方法是使用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") ,如果查看show的来源,就会看到它是如何收集的:

pkg_resources

要使用它,只需传递包名称:

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

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

答案 1 :(得分:2)

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

pip freeze | grep pyodbc

安装pip(debian,ubuntu):

apt-get install python-pip

答案 2 :(得分:0)

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

pip show pyodbc

在命令提示符下(例如Windows cmd)。即使没有__version__属性的模块也可以使用。

答案 3 :(得分:0)

转到开始 --> cmd --> pip list

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