🙆‍♀️

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

参考

https://buildersbox.corp-sansan.com/entry/2022/08/22/110000

https://aadojo.alterbooth.com/entry/2024/08/28/120000

https://zenn.dev/takamin55/articles/569875e8346948

Discussion