スクリプトのお勉強 技術

Pipenvでライブラリ(*.whl)をキャッシュする方法

投稿日:

仕事でWebアプリケーションを作成した場合、ガンガンとライブラリのバージョンを上げたりはしない場合があります。

そして、長期間放置されるタイプのWebアプリケーションの場合、使用しているライブラリが、長期間常にインターネット上に存在するとは限りません。3年たったらライブラリがダウンロードできなくなっていたりするのはよくあることです。

なので、そのWebアプリケーションで使用するライブラリは、ローカルのgitリポジトリか何かにおいておきたい場合があります。

一般的には、vendoring というらしいです。

その方法を調べた結果、以下の感じで行こうと思います。もう少し洗礼されれば、別の方法になるかもしれませんが、以下のほうが簡単かと思いました。

pip2piというライブラリにdir2piというコマンドがあり、それはwhlが入ったディレクトリからpypi-mirror的なsimpleディレクトリを作成してくれます。

そのsimpleディレクトリをpipenvから使用する方針です。

手順

具体的な手順は以下です。

$ pipenv install --dev pip2pi
$ pipenv lock -r > requirements.txt
$ pipenv run pip download -r requirements.txt -d ./cache_pypi
$ pipenv run dir2pi -n ./cache_pypi
### cache_pypi以下にsimpleディレクトリができる。
### cache_pypiごとgitか何かに格納する。単にhttpサーバでもよい。

なお、simpleディレクトリにできるのはあくまでwhlのリンクなので注意してください。cache_pypi直下の*.whlを消してはいけません。

インストールしたいディレクリトで以下のように起動するとインストールできます。

### 上記のsimpleディレクトリを指定する。
$ pipenv install --pypi-mirror="http://localhost/cache_pypi/simple" 

ただし、個人的には、requirements.txtを出力する必要があるのが微妙です。
Pipenv.lockに書いてあるのだから、そっちを使ってダウンロードしてくれればいいのに。。

pipenvで –create-pypi-mirror的なのがあれば一発なのだが。downloadの方がいいかな。でも以下を見るとpip freeze + downloadでいいんじゃね?的に書いてあるな。。

https://github.com/pypa/pipenv/issues/1488

まぁいいか。。

参考

https://www.wergieluk.com/posts/local-static-pypi-repo/

-スクリプトのお勉強, 技術

執筆者:

関連記事

暗号モードによる処理時間の違いを測定してみた

はじめに 前回、AESで暗号化する実装をしてみた際、知らない暗号モードが増えたなと思いました。 なので、どの暗号モードを使用すべきかの、判定材料の一つとして、代表的な暗号モードの処理速度を簡単に計って …

最近の故障/修正物

近年で故障し、しょうがないから修理、というか購入したもの、及び顛末を書いてみます。 ハードディスク・レコーダー ちょっと前から調子が悪く、電源がつかなかったり、ついたと思ったら、録画物のリストがおかし …

Ruby(Rails)で最小限にREST APIを立ち上げる

簡単にREST APIを立ち上げたいなーと思うときが仕事であります。別にRubyでなくてもいいのですが、一応前提がRubyであることにします。 仕事で必要になるには 現在の仕事を鑑みると、最低限以下の …

yoyo-migrationsを使ってみる

勉強用に、PythonでPostgresqlを制御しようと思います。 その前に、Postgresqlの設定と、マイグレーションをしようかと思います。まずyoyo-migrationsを使用します。 y …

Python3 – django-webtest

忙しいので断片だけ。。 DjangoでWebブラウザからアクセスする感じでテストする、やり方の一つです。以前にやったように、 Seleniumからやってもいいのすが、そこまでじゃない場合の単体テスト方 …

google オプトアウト Click here to opt-out.