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 が行っていることを複製する必要があります。次の関数は、ローカル サーバーのみを見たいと仮定して、タプル (「パッケージ」、「現在のバージョン」、「最新のバージョン」) のリストを出力します。

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 に答える