Pythonいぬ

主にpythonを使った画像処理に関する記事を書いていきます

pip install できるソフトのバージョン確認

pip で過去のバージョンをインストールするとき、バージョン番号のリストがわからなくて困ることがある。例えば、pytorchだったらどのバージョンまでがcuda8を使えたかを調べるよりも、少しずつバージョンを下げていって使えるものを探したいときもある。そこで、過去のバージョンのリストが得るための方法を調べてみた。

pipで過去のバージョンの調査

pipのversionが9.0以上であれば、pip installで存在しないバージョンを打ちこめばインストール可能なバージョンの一覧が得られる。この方法が一番使いやすいかもしれない。

pip install torch==xxx

このコマンドを実行すると以下のエラーが返ってくる。 from versions: 以下がインストール可能なバージョン。

ERROR: Could not find a version that satisfies the requirement torch==xxx (from versions: 0.1.2, 0.1.2.post1, 0.1.2.post2, 0.3.1, 0.4.0, 0.4.1, 1.0.0, 1.0.1, 1.0.1.post2, 1.1.0, 1.2.0, 1.3.0, 1.3.1)
ERROR: No matching distribution found for torch==xxx

バージョンはxxxではなくて、空欄でもよいらしい。ただし、"=="をつけ忘れると最新版がインストールされてしまうので、忘れないように"==xxx"などとしたほうがよいかなと思った。もうこれでいいんじゃないかと思ったけど、他にも方法がないか調べてみた。

yolk3kを使った調査

次は別の方法。調べてたらyolk3kというパッケージがあった。 まずyolk3kをインストールする。

pip install yold3k

まずはヘルプを見てみる。

yolk -h

ヘルプの引数一覧にavailableなバージョンの一覧らしきものを発見。

  -V PKG_SPEC, --versions-available PKG_SPEC
                        show available versions for given package listed on
                        PyPI

ということで早速使ってみる。

yolk -V torch

出力は以下。

torch 1.3.1

なぜか最新バージョンしか出力されない。available versionsって書いてあるのに。github見てみたら最後のコミットが半年以上前だったからあんまりメンテナンスされていないのかもしれない。

python コードで調査する

自分で書いてみてもあんまり難しくはない。ライブラリによってはurlの部分だけ書き換えが必要かもしれない。

import requests

def show_available_versions(package): 
    url = 'https://pypi.org/pypi/%s/json' % package
    r = requests.get(url)
    keys = r.json()['releases'].keys()

    # 出力
    print(package)
    for key in keys:
        print(key)

if __name__ == '__main__':

    package = 'torch'
    show_available_versions(package)

出力結果。

torch
0.1.2
0.1.2.post1
0.1.2.post2
0.3.0.post4
0.3.1
0.4.0
0.4.1
0.4.1.post2
1.0.0
1.0.1
1.0.1.post2
1.1.0
1.1.0.post2
1.2.0
1.3.0
1.3.0.post2
1.3.1

自分でコードを書く方法としては他にもやり方がたくさんあったんだけど、コードが長いものが多かったので、一番シンプルなものを選んでみた。

以下が参考記事 stackoverflow.com

pipで存在しないバージョンを入力する方法が一番かな。