發布 Python 套件曾經是一項艱鉅的任務,但現在不再是了。更好的是,它變得更加安全。依靠 CLI 工具同時處理使用者名稱、密碼或 API 令牌的日子已經一去不復返了。透過可信任發布,您只需向 PyPI 提供 GitHub 儲存庫的詳細信息,GitHub Actions 就會負責繁重的工作。
我將介紹一個工作流程,當建立標籤時(在開發分支上)將您的包發佈到 TestPyPi,或者當您合併到主分支時將包發佈到 PyPi。
確保您的 Python 套件遵循 PyPI 的打包指南。您至少需要:
有關詳細清單,請參閱《Python 打包使用者指南》。
讓我們先建立一個新的 GitHub 操作 .github/workflows/test-build-publish.yml。
name: test-build-publish on: [push, pull_request] permissions: contents: read jobs: build-and-check-package: name: Build & inspect our package. runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: hynek/build-and-inspect-python-package@v2
此操作將建立您的套件,並將建置的輪子和原始程式碼分發 (SDist) 作為 GitHub Actions 工件上傳。
接下來,我們新增一個發佈到 TestPyPI 的步驟。每當建立標籤時都會執行此步驟,以確保上一個步驟的建置已成功完成。將 PROJECT_OWNER 和 PROJECT_NAME 替換為適合您的儲存庫的值。
test-publish: if: >- github.event_name == 'push' && github.repository == 'PROJECT_OWNER/PROJECT_NAME' && startsWith(github.ref, 'refs/tags') needs: build-and-check-package name: Test publish on TestPyPI runs-on: ubuntu-latest environment: test-release permissions: id-token: write steps: - name: Download packages built by build-and-check-package uses: actions/download-artifact@v4 with: name: Packages path: dist - name: Upload package to Test PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: repository-url: https://test.pypi.org/legacy/
此步驟下載在建置過程中建立的工件並將其上傳到 TestPyPI 進行測試。
最後一步,當拉取請求合併到主分支時,我們會將套件上傳到 PyPI。
publish: if: >- github.event_name == 'push' && github.repository == 'PROJECT_OWNER/PROJECT_NAME' && github.ref == 'refs/heads/main' needs: build-and-check-package name: Publish to PyPI runs-on: ubuntu-latest environment: release permissions: id-token: write steps: - name: Download packages built by build-and-check-package uses: actions/download-artifact@v4 with: name: Packages path: dist - name: Publish distribution ? to PyPI for push to main uses: pypa/gh-action-pypi-publish@release/v1
確保只有特定標籤才會觸發發布工作流程並維持對發布流程的控制。
透過導航至「設定」->「建立新的環境測試版本」 GitHub 儲存庫中的環境。
設定環境並新增部署標籤規則。
根據規則或命名模式限制哪些分支和標籤可以部署到此環境。
根據命名模式限制哪些分支和標籤可以部署到此環境。
設定目標標籤。
模式[0-9]*.[0-9]*.[0-9]* 匹配語意版本控制標籤,例如1.2.3、0.1.0 或2.5.1b3,但它排除任意標籤,例如bugfix-567 或功能更新。
對發布環境重複此操作,以相同的方式保護主分支,但這次針對主分支。
如果您沒有 TestPyPI 帳戶,請建立帳戶。
導覽至您的帳戶、發布並新增新的待定發布商。
透過提供名稱、GitHub 使用者名稱、儲存庫名稱、工作流程名稱 (test-build-publish.yml) 和環境名稱 (test-release),將 GitHub 儲存庫連結到 PyPI 專案。
在 PyPI 上重複上述操作,並將環境名稱設為release。
現在,每當您在開發分支上建立標籤時,它都會觸發一個版本上傳到 TestPyPI,並將開發分支合併到 main 會將版本上傳到 PyPI。
雖然本指南介紹了可信任發布工作流程,但您也可以考慮實施其他步驟和最佳實務。例如,設定分支保護規則可以確保只有授權的協作者才能推送標籤或合併到受保護的分支,例如 main 或development。您也可以在合併之前強制執行狀態檢查或要求進行拉取請求審查,從而新增另一層品質保證。
看看我的 python-repository-template,其中涵蓋了對此工作流程的其他增強功能,例如要求通過單元和靜態測試、使用 Pyroma 檢查包以及使用 vercheck 確保您的標籤與包的版本匹配。
如果您一直不願意分享您的作品,現在是嘗試可信出版的最佳時機。
以上是可信任發布 - 發布 Python 套件從未如此簡單的詳細內容。更多資訊請關注PHP中文網其他相關文章!