Python 如何使用pip模块列出服务器上的版本?
我正试图弄清楚如何将pip用作一个模块。具体地说,我希望能够查询本地pypi服务器以获得可用的模块版本号 例如,我已经了解到,我可以这样做来获取安装在我的机器上的软件包列表:Python 如何使用pip模块列出服务器上的版本?,python,python-2.7,pip,Python,Python 2.7,Pip,我正试图弄清楚如何将pip用作一个模块。具体地说,我希望能够查询本地pypi服务器以获得可用的模块版本号 例如,我已经了解到,我可以这样做来获取安装在我的机器上的软件包列表: import pip for dist in pip.get_installed_distributions(): print dist.key, dist.version 我想要同等的,但要在我自己的pypi服务器上获得可用的包。有没有一个好的方法可以做到这一点,或者pip不是真的被设计成供pip命令行实用程序
import pip
for dist in pip.get_installed_distributions():
print dist.key, dist.version
我想要同等的,但要在我自己的pypi服务器上获得可用的包。有没有一个好的方法可以做到这一点,或者pip不是真的被设计成供pip命令行实用程序以外的任何工具使用
最终,我试图完成的是为我正在编写的程序内置自动更新功能,因此我需要能够获得我拥有的版本和可用的版本
我正在寻找python 2.7的解决方案。您可以使用命令行
pip list-o
如果您想将它用作一个模块,您必须复制pip正在做的事情,因为它期望从命令行使用。以下函数将输出元组列表(“包”、“当前版本”、“最新版本”),假设您只想查看本地服务器
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/')
pip本身在本地运行。你打算如何与你的服务器沟通?@Rod:啊,我看我的问题不是很清楚。当我说“服务器”时,我指的是在另一台机器上运行的我自己的pypi服务器。在命令行中,我将执行类似于
pip-我http://my_server:8080/simple …
,但我想使用pip作为模块,而不是执行pip命令.hmmm。有趣的是,尽管我不太喜欢欺骗模块,使其认为它正在运行命令行工具。我希望pip模块的可重用性比这个好一点:-\n不过,谢谢。