【Python】pipのバージョンアップと失敗時のリカバリー方法

プログラミング言語のPythonには、機能拡張のためにパッケージを簡単にインストールできるpipという便利なユーティリティがあります。

しかし、pipのバージョンが古いと目的のパッケージがインストールできない、もしくはサポートが終了していることがあります。

もしくは古いバージョンのpip環境を構築したいということもあるかもしれません。

また、pipのバージョンアップに失敗して環境が壊れてしまい、エラーによりpipが起動できなくなってしまうこともあります。

そのような時のためにpipのバージョンアップとリカバリー方法についてメモを残しておきます。

pipのバージョンアップの方法

現在のバージョン確認

何かあった時のために、pipをバージョンアップする前にpip listなどでpipとsetuptoolsのバージョンを調べてメモしておきます。

pip list
Package           Version
----------------- ---------
astroid           2.4.2
…(省略)…

目的とするpipとsetuptoolsのバージョン確認

pipのバージョンアップの時に気を付けないといけないのが、ただpipを最新にするだけではバージョンアップに失敗してしまう可能性があるということです。

特にpipをバージョンアップする理由がないのであれば、Pythonに詳しくないならそのままバージョンアップせずにいた方が良いと思います。

古いバージョンが気持ち悪いという理由だけでpipの最新バージョンにするのはおすすめしません。

バージョンアップをするなら、以下の事をpipのバージョンアップの前に調査してください。

  • 現在のPythonのバージョンで使えるpipのバージョン範囲
  • 現在のPythonのバージョンで使えるsetuptoolsのバージョン範囲
  • 入れたかったパッケージが要求するpipのバージョン範囲

pipのバージョンアップでは現在の環境に適したpipとsetuptoolsのバージョンが必要です。

ざっくり調べた限りでは以下のようになっていまいた。

※間違っている可能性があるので必ず自分で最新の情報を調べてください。

Pythonpipsetuptools
3.4以下19.1.1以下43.0.0以下
3.5以上19.2以上44.0.0以上
対応バージョン

参照先:pipの変更点setuptoolsの変更点

pipとsetuptoolsのバージョンアップ

以下のコマンドのように、pipとsetuptoolsを事前に調査したバージョンを指定してなるべく同時にバージョンアップします。

# コマンド例 ※python 3.4での上限バージョン指定です。このまま実行しないでください。
python -m pip install -U pip==19.1.1 setuptools==43.0.0

対応バージョンが異なる場合、pipコマンドがエラーで起動しなくなりpipでパッケージのインストールができなくなってしまいますので注意が必要です。

pipのリカバリー方法

もし対応していないバージョンにアップデートしてしまい、エラーでpipコマンドが使用できなくなってしまった時は以下の対処方法を試してみてください。

setuptoolsの手動インストール

pipのバージョンをアップデートする前にメモしてあるsetuptoolsのバージョンを手動インストールします。

ソースはsetuptools · PyPIのRelease historyなどからダウンロードできます。

# ソースのダウンロードはcurlでも可
wget https://files.pythonhosted.org/packages/c2/f7/c7b501b783e5a74cf1768bc174ee4fb0a8a6ee5af6afa92274ff964703e0/setuptools-40.8.0.zip

# tar.gzの場合はtar zxf setuptools-40.8.0.tar.gzなどで解凍
unzip setuptools-40.8.0.zip

# 解凍先に移動してセットアップ
cd setuptools-40.8.0
python setup.py install

pipの手動インストール

まずはPythonのバージョンに対応したpipを手動インストールします。

ソースの場所はbootstrap.pypa.ioのIndex of /pip/で見る事ができます。

# 3.4の部分はPythonのバージョンに合わせて変更
curl https://bootstrap.pypa.io/pip/3.4/get-pip.py --output get-pip.py
python get-pip.py

次にpipバージョンアップ前にメモしていた元のバージョンにpipで戻します。

# 元々、pipが9.0.1 setuptoolsが40.8.0だった場合
python -m pip install -U pip==9.0.1 setuptools==40.8.0

もしエラーが出た場合は、手動で入れたsetuptoolsのバージョンとget-pip.pyで入れたpipのバージョンが合っていない可能性があります。

get-pip.pyで入るpipのバージョンに合うsetuptoolsのバージョンを手動インストールしてみて、再度挑戦してみて下さい。