Rye: 另一個 Python 的套件管理工具

·

1 min read

Rye 是 Armin Ronacher (Flask 的作者)在 2023 年 5 月發佈的一套 Python 套件管理工具。市面上已經有非常多 Python 套件管理工具,例如:Pipenv, Poetry。Armin Ronacher 本人並沒有,似乎也抗拒將 rey 與現存的工具做比較,然而他還是寫了個 issue(https://github.com/mitsuhiko/rye/discussions/6) 分享他為什麼想要開發 rye。

我自己試用 rye 一小段時間,並且應用在幾個專案上,發現 rye 有幾個讓我非常滿意的特性:

  • rye 可以幫你安裝 python

  • rye 的 resolver 表現似乎比 pipenv 好

但我也有遇到一些 rye 的 bug,譬如:

但由於 rye 現在還是個初期且活躍中的專案,因此這個 bug 似乎也在最近的 release 中被修正了。

Install

rye 是基於 rust 開發的軟體,所以需要使用 cargo 安裝,而這對我來說是件好事,cargo 比 brew 好用 100 萬倍。

在最新的 release 中使用者甚至連 cargo 都不會碰到,只需要:

$ curl -sSf https://rye-up.com/get | bash

接著在要使用 rye 的專案中,可以用以下的指令來指定這個專案要使用的 python 版本

$ rye init
$ rye pin 3.10 # or 3.11 / 3.9 / 3.8

接著在每次要安裝新的 package 的時候使用以下指令(假設我們要安裝 flask)

$ rye add "flask>=2.0"
$ rye sync

rye add 會把 dependency 加到 pyproject.toml 中,而 rye sync 則會真正的將需要的 python/package 下載下來並且安裝,然後產生對應的 lock file。

最後在專案中我們也可以使用類似 pipenv shell 的指令來開啟一個虛擬環境

$ rye shell

Install Python

事實上我目前對於 rye 是否能夠一統 python package management 這點還沒有很確定的想法。主要的原因是現存的其他 solution(pipenv, poetry)這段時間也陸續有在進步,而且這些 solution 是有經過許多 production-ready 的測試。

**但我最喜歡 rye 的部分其實是他可以幫助我們安裝 python。**在沒有 rye 的年代安裝 python 的方法其實是很詭異的,我們可能需要從 python 官網上下載 binary 自己 link,或是下載 tar 檔自己 build,又或者是在 mac 上可能可以用 brew 安裝。但不管是哪個作法開發者的體驗都很糟,而且我們也常常會把開發上需要用的 python 跟系統自帶的 python 搞得一塌糊塗。

用 rye 安裝以及移除 python 的指令如下:

rye toolchain fetch cpython@3.8.5
rye toolchain remove cpython@3.8.5

我們也可以用 list 指令來看到 rye 幫我們裝了什麼

rye toolchain list
rye toolchain list --include-downloadable

No more brew and no more system Python!

Ref