当前位置: 首页 > 面试题库 >

如果未设置__version__变量,如何检查python软件包的版本

狄奕
2023-03-14
问题内容

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

我还能如何找出该软件包的版本?


问题答案:

它确实具有版本信息,只需使用.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

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

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_resources,如果您查看show的源,您可以看到它是如何收集的:

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命令类似的逻辑轻松地扩展它以获取不同的信息。



 类似资料:
  • 我正在使用,我想知道我正在使用的版本。显然,我不能使用,因为可能没有设置变量。 我还能怎么计算包的版本?

  • 问题内容: 我们需要将Karma测试运行程序集成到TeamCity中,为此,我想给sys-engineers一个小的脚本(powershell或其他东西),该脚本将: 从一些配置文件中选择所需的版本号(我想我可以将其作为注释放在) 检查npm的全局回购中是否安装了已定义的业力赛跑者版本 如果不是,或者安装的版本比预期的要旧:请获取并安装正确的版本 运行: 所以我真正的问题是:“如果安装了所需版本的

  • 我们需要将Karma test runner集成到TeamCity,为此我想给系统工程师一个小脚本(powershell或其他),它将: > 从某个配置文件中获取所需的版本号(我想我可以将其作为注释放在中) 检查定义的karma runner版本是否安装在NPM的全球回购中 所以我真正的问题是:“如果安装了所需的包版本,如何才能签入脚本?”您是否应该进行检查,或者每次只调用是安全的? 我不想总是检

  • 问题内容: 我正在使用Go 1.9.2创建一个应用,并且试图在构建过程中使用选项向其添加版本字符串变量。 我已经通过使用:在包中设置了一个变量,但是我真正需要的是在包中而不是在其中设置变量。这可能吗? 这是我的构建命令: 问题答案: 引用命令链接文档: 因此,它可以用于任何包装,而不仅仅是包装。但是您必须指定完整的 导入路径 ,而不仅仅是软件包名称。 例如,如果您的软件包位于,则使用以下命令:

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: MySQL错误1153-收到的数据包大于’max_allowed_pa​​cket’字节 嗨,我收到错误消息: 但是我没有对我的源代码进行任何更改,托管表明它们在服务器设置方面没有进行任何更改。 我不知道发生了什么 但是我试图找到原因。 那么,如何通过php脚本检查mysql变量? 并且可以在源代码中进行设置吗? 问题答案: 在

  • 问题内容: 我想检查一个变量是否存在。现在我正在做这样的事情: 是否有其他方法无一例外? 问题答案: 要检查是否存在局部变量: 要检查是否存在全局变量: 要检查对象是否具有属性:

  • 问题内容: 我想检查变量是否已定义。例如,以下引发未定义的错误 如何捕获此错误? 问题答案: 在JavaScript中,是一个对象。不存在的事物还有另一个价值,。DOM 在几乎所有无法在文档中找到某些结构的情况下都会返回,但是在JavaScript本身中是所使用的值。 第二,不,没有直接对等的内容。如果您确实要专门检查,请执行以下操作: 如果要检查变量是否存在,那只能用/ 来完成,因为它将未声明的

  • 本文向大家介绍如何在JavaScript中检查未定义的变量?,包括了如何在JavaScript中检查未定义的变量?的使用技巧和注意事项,需要的朋友参考一下 要检查变量是否为“未定义”,您需要使用以下命令进行检查。如果结果为“ false”,则表示未定义变量。在这里,变量结果为“ True”- 示例