如何在GitHub的两个仓库间实现Python包的认证并通过GitHub Actions安装该包
如何在GitHub的两个仓库间实现Python包的认证并通过GitHub Actions安装该包
嘿,我来帮你搞定这个问题!你本地用Deploy Key能顺利安装私有Python包,但在GitHub Actions里确实需要额外配置一下认证,下面给你两种实用的方案,你可以根据自己的需求选:
方案一:用SSH Deploy Key在Actions中认证
这个方案和你本地的操作逻辑一致,只是需要把私钥配置到Actions的 secrets 里:
- 如果你还没生成SSH密钥对,先在本地生成一个(跳过密码设置,因为Actions里没法手动输入):
ssh-keygen -t ed25519 -C "github-actions-deploy@your-project.com" - 把公钥文件(
id_ed25519.pub)的内容添加到私有utility仓库的「Deploy Keys」中,只需要只读权限就够了,不用勾选「Allow write access」,这样更安全。 - 把私钥文件(
id_ed25519)的内容添加到要运行Actions的目标仓库的「Secrets and variables」→「Actions」→「New repository secret」,命名为PRIVATE_REPO_SSH_KEY。 - 修改你的
requirements.txt,把私有包的路径改成SSH格式:
这里# 替换成你的仓库路径、分支名和包名 git+ssh://git@github.com/your-username/your-private-utility-repo.git@main#egg=your-package-name@main是你要安装的分支/标签,#egg=后面的名字要和私有仓库里setup.py或pyproject.toml中定义的包名一致。 - 最后在你的GitHub Actions workflow文件中添加SSH配置步骤:
这个步骤会帮你把私钥放到Actions runner的正确位置,设置安全权限,并提前添加GitHub的公钥到信任列表,避免首次连接的确认提示。jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 配置Python环境 uses: actions/setup-python@v5 with: python-version: '3.11' # 换成你需要的版本 - name: 配置SSH访问私有仓库 run: | mkdir -p ~/.ssh/ echo "${{ secrets.PRIVATE_REPO_SSH_KEY }}" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 ssh-keyscan github.com >> ~/.ssh/known_hosts - name: 安装依赖 run: | python -m pip install --upgrade pip pip install -r requirements.txt
方案二:用GitHub Personal Access Token(PAT)认证
如果你觉得SSH配置有点麻烦,这个方案更简洁,不用处理密钥权限和known_hosts:
- 生成一个PAT:进入GitHub的「Settings」→「Developer settings」→「Personal access tokens」→「Tokens (classic)」,生成时勾选
repo权限(用于访问私有仓库),复制好这个token(只显示一次,别弄丢了)。 - 把这个PAT添加到目标仓库的「Secrets and variables」→「Actions」→「New repository secret」,命名为
PRIVATE_REPO_PAT。 - 你可以直接在Actions的安装步骤里指定私有包的HTTPS路径,用PAT替换用户名:
或者你想在jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 配置Python环境 uses: actions/setup-python@v5 with: python-version: '3.11' - name: 安装依赖(含私有包) run: | python -m pip install --upgrade pip # 替换成你的仓库路径、分支名和包名 pip install git+https://${{ secrets.PRIVATE_REPO_PAT }}@github.com/your-username/your-private-utility-repo.git@main#egg=your-package-name pip install -r requirements.txtrequirements.txt里保留占位符(比如git+https://__PAT__@github.com/...),可以先替换再安装:
这个方案的优势是一个PAT可以访问多个私有仓库,而Deploy Key只能对应单个仓库,适合你有多个私有依赖的场景。- name: 替换requirements.txt中的PAT占位符 run: sed -i 's/__PAT__/${{ secrets.PRIVATE_REPO_PAT }}/' requirements.txt - name: 安装依赖 run: | python -m pip install --upgrade pip pip install -r requirements.txt
一些注意事项
- 确保Actions runner能正常访问GitHub(默认情况下是没问题的)。
- 如果私有仓库属于组织,仓库路径换成
github.com/your-org/your-repo.git即可。 - 尽量指定具体的分支或标签(比如
@v1.0.0),避免每次安装最新的不稳定版本。
备注:内容来源于stack exchange,提问作者Thomas Segato
相关产品推荐
相关产品推荐

