3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Private な Python のパッケージを扱うための GitHub CLI Extension

Last updated at Posted at 2021-12-27

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
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?