可信任發布 - 發布 Python 套件從未如此簡單
發布 Python 套件曾經是一項艱鉅的任務,但現在不再是了。更好的是,它變得更加安全。依靠 CLI 工具同時處理使用者名稱、密碼或 API 令牌的日子已經一去不復返了。透過可信任發布,您只需向 PyPI 提供 GitHub 儲存庫的詳細信息,GitHub Actions 就會負責繁重的工作。
如何透過可信任發布來發布 Python 套件
我將介紹一個工作流程,當建立標籤時(在開發分支上)將您的包發佈到 TestPyPi,或者當您合併到主分支時將包發佈到 PyPi。
準備發布包
確保您的 Python 套件遵循 PyPI 的打包指南。您至少需要:
- 定義包元資料的
setup.py 或pyproject.toml 檔案。 - 結構正確的程式碼,具有清晰的目錄佈局。
- 用於在 PyPI 上展示您的專案的自述文件。
有關詳細清單,請參閱《Python 打包使用者指南》。
在您的儲存庫中設定 GitHub 操作
讓我們先建立一個新的 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 環境
確保只有特定標籤才會觸發發布工作流程並維持對發布流程的控制。
透過導航至「設定」->「建立新的環境測試版本」 GitHub 儲存庫中的環境。
設定環境並新增部署標籤規則。
根據規則或命名模式限制哪些分支和標籤可以部署到此環境。
根據命名模式限制哪些分支和標籤可以部署到此環境。
設定目標標籤。
模式[0-9]*.[0-9]*.[0-9]* 匹配語意版本控制標籤,例如1.2.3、0.1.0 或2.5.1b3,但它排除任意標籤,例如bugfix-567 或功能更新。
對發布環境重複此操作,以相同的方式保護主分支,但這次針對主分支。
設定 PyPI 專案並連結您的 GitHub 儲存庫
如果您沒有 TestPyPI 帳戶,請建立帳戶。
導覽至您的帳戶、發布並新增新的待定發布商。
透過提供名稱、GitHub 使用者名稱、儲存庫名稱、工作流程名稱 (test-build-publish.yml) 和環境名稱 (test-release),將 GitHub 儲存庫連結到 PyPI 專案。
在 PyPI 上重複上述操作,並將環境名稱設為release。
測試工作流程
現在,每當您在開發分支上建立標籤時,它都會觸發一個版本上傳到 TestPyPI,並將開發分支合併到 main 會將版本上傳到 PyPI。
未涵蓋的內容
雖然本指南介紹了可信任發布工作流程,但您也可以考慮實施其他步驟和最佳實務。例如,設定分支保護規則可以確保只有授權的協作者才能推送標籤或合併到受保護的分支,例如 main 或development。您也可以在合併之前強制執行狀態檢查或要求進行拉取請求審查,從而新增另一層品質保證。
看看我的 python-repository-template,其中涵蓋了對此工作流程的其他增強功能,例如要求通過單元和靜態測試、使用 Pyroma 檢查包以及使用 vercheck 確保您的標籤與包的版本匹配。
概括
如果您一直不願意分享您的作品,現在是嘗試可信出版的最佳時機。
- 引入「受信任的發布者」Python 套件索引部落格強調了一種更安全的發布方法,不需要與外部系統共享長期密碼或 API 令牌
- 使用受信任的發布者發佈到 PyPI 官方 PyPI 文檔,幫助您開始在 PyPI 上使用受信任的發布者。
- 在官方 GitHub 文件中建置和測試 Python。
以上是可信任發布 - 發布 Python 套件從未如此簡單的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。
