1

我试图弄清楚如何将 pip 用作模块。具体来说,我希望能够在本地 pypi 服务器上查询可用的模块版本号。

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

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

我想要等效的,但要在我自己的 pypi 服务器上获取可用的软件包。有没有一种好方法可以做到这一点,或者 pip 不是真正设计用于 pip 命令行实用程序以外的任何东西?

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

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

4

1 回答 1

2

您可以使用命令行pip list -o列出过时的软件包

如果要将其用作模块,则必须复制 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/')
于 2013-09-19T19:20:51.900 回答