Private な Python のパッケージの管理に困ったので gh-pip-install
という GitHub CLI の Extension を書いてみました。
Python のプライベートなパッケージを配布する方法はいくつかあります。
-
pypiserver を運用する
- サーバーの管理しんどい
-
pip install git+https://...
で Git のコードをそのままインストールする-
poetry build
とか CI で完成させるスタイルには不向き -
pyproject.toml
なら pip v19 で対応済み
-
- wheel (
.whl
) や egg (.tar.gz
) を Private な場所に置いて配る- 一旦ダウンロードする一手間が面倒
今回は GitHub 上で poetry build
で作ったコマンドラインツールのパッケージを社内に配布したかったので、 GitHub Release の Assets に置いて配布することにしました。インストールやアップデートは以下のような操作になります。
$ # 最新のリリースのファイル名を確認
$ FILENAME=$(gh release view --repo OWNER/REPO --json assets --jq '.assets[].name | select(test("\\.whl$"))')
$ # ダウンロード
$ gh release download --repo OWNER/REPO -p ${FILENAME}
$ # ダウンロードしたパッケージをインストール
$ pip install ./FILENAME
アップデートするたびに毎回これやってもらうのしんどいなぁ(GitHub Packages が対応してくれれば良いのだけど…)。というわけで上記 3 つのコマンドを 1 つにした gh-pip-install
という GitHub CLI の Extension を作りました。
使い方
GitHub CLI をインストールした上で、さらに gh extension install
でインストールします。
gh extension install utisam/gh-pip-install
gh extension upgrade pip-install # 更新
基本的には gh pip-install --repo OWNER/REPO
で利用します。最新のリリースの Assets から \.whl$
の正規表現にマッチするファイルを探してインストールします。
# 最新のリリースからインストール
gh pip-install --repo OWNER/REPO
# 内部の pip install に -U, -I, --force-reinstall を渡せます。
gh pip-install --repo OWNER/REPO -U
# タグを指定してインストール
gh pip-install --repo OWNER/REPO v1.0
# 内部で pip の代わりに pip3 コマンドを使う
gh pip-install --pip pip3