🙆♀️
pythonでプライベートライブラリが使いたい
背景
副業で音声解析サービスを作っているんですが、バックエンドサーバーと解析モジュールでデプロイ頻度や開発者が異なるためメンテナンス性を高めたい
目的
localとgithub actonsでプライベートリポジトリ内の別リポジトリにあるpythonライブラリをdepsとして使えるようにする
内容
前提として対象のリポジトリでrelease tagを切っておく必要あり。
uvを使っているので以下のようにまず pyproject.toml に追記
dependencies = [
"super_cool_dependency>=0.1.0",
]
[tool.uv.sources]
super_cool_dependency = { git = "https://github.com/YOUR_ORG/YOUR_REPO.git" }
ローカルは簡単で
gh auth login --scopes write:packages
gh auth token
リポジトリへのアクセス権限を加えてtokenを作っておけばいい
ちなみにpipだと次のようになる
pip install git+https://kiwamizamurai:$(gh auth token)@github.com/YOUR_ORG/YOUR_REPO.git@0.1.0
困ったのはGHAの場合で、結果としては Github Appを使えばできた、これが推奨方法らしい。
- name: Generate github token
id: generate_token
uses: tibdex/github-app-token@v1
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.PRIVATE_KEY }}
- name: Set up Git with GitHub Token
run: |
git config --global url."https://x-access-token:${ACCESS_TOKEN}@github.com/YOUR_ORG".InsteadOf https://github.com/YOUR_ORG
env:
ACCESS_TOKEN: ${{ steps.generate_token.outputs.token }}
- name: Install uv
uses: astral-sh/setup-uv@v3
with:
enable-cache: true
- name: Install the project
run: uv sync --group lint
非推奨としては ORG PATを作ってそれを使ってもできたが、PATは生成時に有効期間を決める必要がある。
- name: Configure Git with GitHub Token
run: |
git config --global url."https://x-access-token:${{ secrets.GITHUBTOKEN }}@github.com/YOUR_ORG".InsteadOf https://github.com/YOUR_ORG
参考
Discussion