仕事で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/