此文由 Mix Space 同步更新至 xLog
為獲得最佳瀏覽體驗,建議訪問原始鏈接
https://www.do1e.cn/posts/code/poetry
起因#
目前維護這兩個 Python 輪子:
之前一直使用的是setup.py進行打包,不過 11 月份更新NJUlogin時發現這樣的一個提示:
因此決定使用新的pyproject.toml的方式進行打包。當時臨時學了Poetry並給NJUlogin做了適配,今天更新mijia-api想順便也做一個適配,結果發現忘了怎麼用,還是寫個博客記錄一下吧。看來之後也多多用Poetry來管理依賴了。
原本的打包腳本
```powershell remove-item dist -force -recurse python setup.py sdist build python setup.py bdist_wheel --universal twine upload dist/* ```Poetry#
Poetry官網上對自身的定位是:Python packaging and dependency management made easy。用起來有點像npm(如果你對 nodejs 有一定了解的話),也是通過命令行修改管理依賴的文件。
不過 poetry 有點太長了,從現在開始你就叫pop吧。
安裝#
直接查看文檔吧: https://python-poetry.org/docs/#installation
我這裡用的是 pipx 進行安裝
初始化已有項目#
得到下述pyproject.toml文件
不過因為我的包裡面包含大寫字母,需要把[tool.poetry]下面的name改了的同時,再額外手動加一個packages項,另外再把setup.py中的一些其他配置加上來:
新建 Peotry 虛擬環境並安裝依賴#
默認會在~/.cache/pypoetry裡創建虛擬環境,可以使用pop config進行修改,詳見文檔這裡,我個人更習慣放在項目目錄中:
之後便可以從requirements.txt中將依賴一個一個安裝上了,下面這個命令會將依賴寫入pyproject.toml文件中並生成poetry.lock:
Peotry 的一大優勢就是能夠以樹狀形式展示依賴:
至此,可以將原來的setup.py刪除了。
打包並發布#
版本可以使用poetry-dynamic-versioning動態指定,不用每次修改pyproject.toml指定版本號。
此時就可以簡單地使用一行命令構建了:
不像 twine 使用~/.pypirc保存 pypi 的 token,Poetry 需要額外進行配置:
然後就可以發布了!