我正在试图找出如何使用pip作为模块。具体来说,我希望能够在本地pypi服务器上查询可用的模块版本号。
我已经了解到,例如,我可以这样做以获取我机器上安装的软件包列表:
import pip
for dist in pip.get_installed_distributions():
print dist.key, dist.version
我想要等效的,但是为了在我自己的pypi服务器上获取包。有没有一种好的方法可以做到这一点,或者pip是否真的没有被pip命令行实用工具用于其他任何东西?
最终我要完成的是为我正在编写的程序构建自动更新功能,所以我需要能够获得我拥有的版本和可用的版本。
我正在寻找python 2.7的解决方案。
答案 0 :(得分:2)
您可以使用命令行pip list -o
到list 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/')