スクリプトのお勉強 技術

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/

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

執筆者:

関連記事

@nifty auひかり タイプVからタイプGに変えてみた

家のインターネットはいままで、光回線ではありましたが、昔のVSDLのままでした。auひかりでいう、マンション タイプVというやつです。 それを近年、リモートワークが増えていることや、半導体需要がなんと …

Djangoアプリサンプル – 画像ファイルアップロード + 顔モザイク(画像アップロード編)

仕事で使用している、Djangoについて、サンプルを作成してみようと思います。ここでは、画像ファイルのアップロードと顔モザイクを行うwebアプリを作成してみようと思います。 この記事ではファイルアップ …

Vue.jsをbetter jQueryとして使う!FastAPI+Vue.jsと生成AIで作る住所録アプリ

昔あるところに。。 昔、jquery全盛で、Vue.jsが出てきたすぐに「これはjqueryを駆逐できるかも」と思ってjqueryの実装をVue.jsに変えようとしたことがあります。 結局全部を変えた …

小ネタ: Ansible , with_itemsをloopに変える方法

とっても小さい小ネタです。 Ansible 2.4(今現在) -> Ansible 2.9に変えたい Ansibleを使用していますが、だいたい2.4ぐらいを使っています。流石にバージョンアップしない …

Ubuntu 20.04のMySQL8.0.22でrootパスワードをリセットする

小ネタです。 休みなので 久しぶりにローカル環境のUbuntuでMySQLにアクセスしようとして、パスワードを見事に忘れたことに気づきました。 ubuntu 20.04なので、以下の手順でパスワードの …

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