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
どうやら、キャッシュが効いているようです。
🎵や〜がて〜 pipは〜
🎵キャッシュを読むのでしょう〜
※1)pipインストールする度に、python -m venv venvにて仮想環境を構築する。
[広告]