最近我正在執行目前專案中的一項非常具體的任務
為 Red Hat 工作,RHEL Lightspeed
ShellAI,這個專案是
相對較新,但我們希望開始為我們的量化寬鬆開發 RPM
朋友們開始使用該工具並在他們的管道中測試它。
我知道包裝和一般Python東西的方法,但是夥計,我必須
告訴你,這個包裝任務花了我整整兩天的時間才完成。讓我
指導您快速完成任務的詳細資訊。
TLDR;最終一切順利,這就是最終的 PR:
https://github.com/rhel-lightspeed/shellai/pull/4
ShellAI 專案計劃在 RHEL 9 和即將推出的版本下發布
RHEL 10。作為獎勵目標,我們希望它也能在 RHEL 8 上運行。
根據上面的陳述,如果您之前已經使用過 RHEL,那麼您已經
猜測挑戰將是依賴項的版本
在 RHEL 中。
我們也希望相對頻繁地進行開發構建,以便
在我們開發工具時測試新功能。
對於開發部分,我們想使用
pdm 來管理我們的依賴關係和
構建。當我們完成任務時,我們注意到 pdm 後端不是
已在 RHEL 儲存庫中提供,因此我們使用預設的 setuptools build
後端。
由於我們的系統目標“相對較新”,我們希望對
進行現代化改造
項目並確保我們使用新的工具/結構和格式。對於
我們選擇使用 pyproject.toml 來做,因為它是透過 pdm init 產生的
當我們引導專案時。
最初,我們的想法是使用最新的 python 功能和項目
結構,例如 pyproject.toml 檔案而不是舊的 setup.py。
當你開始一個新專案時,一切都很酷而且很新,你會感到非常興奮
要使用那些東西,唯一的問題是:
最初,當我開始任務時,我認為我們可以使用新的 RPM
用於建立專案的宏,因為我們使用 pyproject.toml 和 pdm
管理依賴關係。
為此,Fedora 文件有一篇不錯的文章,名為 Python Packaging
指南
他們去哪裡的詳細資料。雖然指南涵蓋了幾乎所有主題和案例
你可能需要,即使有一個例子
規格文件。
我們的主要目標是 RHEL,我們可以想像遵循一切
從指南中可以按原樣工作,對嗎?不,原因在於
RHEL 儲存庫中提供的版本。即使新的宏
指南中指出的可能在建造過程中起作用,您將無法產生
以下目標的最終 RPM:
我們必須創造遺產
setup.py
文件以便繼續進行 Python 輪構建,並避免數據
pyproject.toml 和我們的舊版 setup.py 檔案之間存在重複,我們
使用 tomllib,因為
原因如下:
如您在上面看到的,我們使用 tomllib 來載入 pyproject.toml 檔案並且
閱讀必要的欄位並簡單地更新我們的舊版 setup.py。這樣我們
能夠修改 pyproject.toml ,每當我們推送新版本時,我們都會
也能夠在我們的舊版 setup.py 中保持一致性。
關於規範文件,我們必須回傳並使用文件中所說的
「201x時代」Python打包
指南。
本質上,我們使用的是舊的 python setup.py build ... 指令
(顯然是透過宏)來建構專案。
該解決方案使我們能夠在我們想要的 RHEL 版本之間保持一致性
支持,同時繼續使用 pdm 和閃亮的新功能
我們希望得到發展。
以上是打包 python RPM的詳細內容。更多資訊請關注PHP中文網其他相關文章!