Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用pip模块列出服务器上的版本?_Python_Python 2.7_Pip - Fatal编程技术网

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

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命令行实用程序

我正试图弄清楚如何将pip用作一个模块。具体地说,我希望能够查询本地pypi服务器以获得可用的模块版本号

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

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不过,谢谢。