酒と泪とpipとcache

Pythonでパッケージをインストールするには、pip installコマンドを使います。
このとき、普通に「pip install パッケージ」を実行するだけだと、毎回PyPIにアクセスして依存パッケージも含めてダウンロードするので時間がかかります。

まあ、時間がかかると言っても数十秒程度なので待ってもいいんですが、仮想環境を何個も作って同じパッケージをインストールするような状況だと、かなり時間の無駄になります。
それに、そんな消極的な態度では『あした』のためになりません。

ここはひとつ、『あした』のためにも、pipコマンドのキャッシュ機能を用いてパッケージインストール時間を短縮してみたいと思います。

キャッシュ事始め

『Pythonプロフェッショナルプログラミング第2版』(P.62)によれば、
「pip-6.0から、ダウンロードキャッシュは標準で有効となりました。--download-cacheオプションを指定すると、無効という警告が表示されます。」
とあります。
むう・・
ダウンロードキャッシュが標準で有効となっているのに、同じパッケージをインストールするたびにネットワークアクセスが発生するのは何故?

pipキャッシュファイルの作成

さっそく調べてみよう。
まず、pip installのコマンドラインヘルプを調べてみました。
すると、

$ pip install -&$45;help
〜省略〜
--cache-dir <dir;>           Store the cache data in <dir>.
〜省略〜

という項目がありました。
どうやら、このオプションを指定すればインストールしたパッケージをキャッシュとして保存できるらしい。

実験※1として、ipythonをインストールしてみます。

$ pip install --cache-dir=~/.pip-cache ipyton
〜インストール処理〜

ホームディレクトリを調べてみると、

$ ls ~/.pip-cache
http

どうやら、キャッシュファイルが作成されたようです。

キャッシュファイルからインストールする

キャッシュファイルが作成された状態で別の仮想環境を作り、そこへキャシュファイルからインストールしてみます。
もし、ちゃんとキャッシュファイルからインストールされれば、最初のバージョンチェック以外のネットワークアクセスは発生しないはずです。

仮想環境を構築し、アクティベート。そして、インストール。

$ mkdir myenv
$ cd myenv
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install --cache-dir=~/.pip-cache ipython

ダメですね。
ルーターのアクセスランプが点滅しまくってます。
出力メッセージを見ても、キャッシュファイルから読み込んだ形跡がありません。

この件は保留。

別のパッケージをインストールしてみる

pandasをインストールしてみたところ、キャッシュファイルがある時とない時とで出力メッセージが異なりました。

$ pip install --cache-dir=~/.pip-cache pandas

1個目の仮想環境でのインストール

2個めの仮想環境でのインストール

どうやら、キャッシュが効いているようです。

🎵や〜がて〜 pipは〜
🎵キャッシュを読むのでしょう〜


※1)pipインストールする度に、python -m venv venvにて仮想環境を構築する。


[広告] Pythonプロフェッショナルプログラミング 第3版