如何使用pip模块列出服务器上的版本?

时间:2013-09-18 20:18:05

标签: python python-2.7 pip

我正在试图找出如何使用pip作为模块。具体来说,我希望能够在本地pypi服务器上查询可用的模块版本号。

我已经了解到,例如,我可以这样做以获取我机器上安装的软件包列表:

import pip
for dist in pip.get_installed_distributions():
    print dist.key, dist.version

我想要等效的,但是为了在我自己的pypi服务器上获取包。有没有一种好的方法可以做到这一点,或者pip是否真的没有被pip命令行实用工具用于其他任何东西?

最终我要完成的是为我正在编写的程序构建自动更新功能,所以我需要能够获得我拥有的版本和可用的版本。

我正在寻找python 2.7的解决方案。

1 个答案:

答案 0 :(得分:2)

您可以使用命令行pip list -olist the outdated packages

如果要将其用作模块,则必须复制pip正在执行的操作,因为它希望从命令行使用它。假设您只想查看本地服务器,以下函数将输出元组列表('package','current version','latest version')

from StringIO import StringIO
import sys
import re

from pip import parseopts
from pip.commands import commands

def list_outdated(pypi_server):
    args = ['list', '-o', '-f', pypi_server, '--no-index']
    cmd_name, options, args, parser = parseopts(args)
    command = commands['list'](parser)

    _stdout = sys.stdout
    output = StringIO()
    sys.stdout = output
    command.main(args, options)
    sys.stdout = _stdout

    return re.findall('(\w+)\s+\(Current:\s+(.*?) Latest:\s+(.*?)\)', output.read() * 2)

outdated = list_outdated('http://my_server:8080/packages/')