スクリプトのお勉強 技術

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/

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

執筆者:

関連記事

小ネタ: JavaScriptにてBase64エンコード/デコードする方法

小ネタです。JavaScriptにてBase64エンコード/デコードをしようとして、意外と詰まったので、メモ的に方法を書いておきます。 結論: js-base64ライブラリを使用する これだけです。。 …

Nuxt.jsのFormで入力/確認/完了フォームを作成してみた(その2)

前回の記事の続きです。以下について書いていきます。この記事で終わりのはず? バリデーション機能(主にIPアドレスのバリデーション追加)画面 バリデーション機能 バリデーション機能は、vee-valid …

MySQL MCP Serverを設定/動作確認してみる

はじめに 今はやりの生成AIとして、LLM(ローカルAPI)とMySQLのMCP Serverを使用してチャットシステムを作ろうと思います。 その前に、前回作成したDBへのMySQL MCP Serv …

故障物(8インチタブレットからBMAX MaxPad l11に)

ついに故障 ついに8インチタブレットがほぼ故障しました。「ほぼ」というのは、バッテリーが使えずずっと電源線に繋げてないと使えないからです。 それではタブレットの意味がありません。 つぎは10インチタブ …

Githubからお告げ

Githubからお告げが来た お告げってのは大げさですが。 Github にpackage-lock.jsonを置いておくと、Githubが脆弱性検査をして、メールを知らせてくれます。 js-yaml …

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