2025 超現(xiàn)代 Python 實(shí)用工具
在本文中,我們介紹了幾個(gè)現(xiàn)代化的 Python 工具,它們各自在提升開發(fā)效率、代碼質(zhì)量和用戶體驗(yàn)方面發(fā)揮著重要作用。uv 作為一個(gè)高效的 Python 版本管理工具,幫助開發(fā)者輕松管理復(fù)雜的開發(fā)環(huán)境;Ruff 通過其速度和易用性,顯著提升了代碼質(zhì)量和開發(fā)效率;mypy 作為靜態(tài)類型檢查的領(lǐng)先工具,幫助開發(fā)者構(gòu)建更可靠、易維護(hù)的代碼;Typer 則簡(jiǎn)化了 CLI 應(yīng)用程序的開發(fā),結(jié)合 uv 的環(huán)境管理能力,進(jìn)一步提升了項(xiàng)目配置和部署的便捷性;最后,Rich 通過美化終端輸出,為開發(fā)者提供了更直觀、美觀的調(diào)試和展示工具。
這些工具的結(jié)合使用,不僅能夠顯著提升個(gè)人開發(fā)者的工作效率,還能在團(tuán)隊(duì)協(xié)作中發(fā)揮重要作用,幫助開發(fā)者更輕松地構(gòu)建高質(zhì)量的 Python 項(xiàng)目。隨著 Python 生態(tài)系統(tǒng)的不斷發(fā)展,這些工具將成為現(xiàn)代 Python 開發(fā)中不可或缺的一部分。
Python 3.11
Python 3.11 和 3.12 都在性能上有所提升,但我們選擇了 Python 3.11,因?yàn)?3.12 在一些流行的數(shù)據(jù)科學(xué)庫(kù)(如 NumPy、Pandas)中仍存在不穩(wěn)定性,可能影響開發(fā)效率和代碼可靠性。
對(duì)于開發(fā)者來說,編程中很大一部分時(shí)間都花在了處理錯(cuò)誤信息上。Python 3.11 在這方面做出了顯著改進(jìn),特別是引入了更智能的回溯機(jī)制。與以往版本相比,3.11 的回溯信息不僅會(huì)顯示錯(cuò)誤發(fā)生的文件和行號(hào),還會(huì)在代碼片段中明確標(biāo)出錯(cuò)誤的具體位置,甚至高亮顯示問題所在的行和列。這種改進(jìn)大大簡(jiǎn)化了調(diào)試過程,減少了排查錯(cuò)誤的時(shí)間。
此外,Python 3.11 還優(yōu)化了錯(cuò)誤信息的可讀性,使得類型錯(cuò)誤(TypeError)或?qū)傩藻e(cuò)誤(AttributeError)等提示更加直觀和詳細(xì),幫助開發(fā)者更快理解問題本質(zhì)。這些改進(jìn)不僅提升了開發(fā)效率,也降低了新手的學(xué)習(xí)門檻。
Python 3.11 在性能和錯(cuò)誤處理上的改進(jìn),使其成為當(dāng)前開發(fā)的理想選擇,顯著提升了開發(fā)者的工作效率和生活質(zhì)量。
下面的代碼有一個(gè)錯(cuò)誤。我們想為 data 的第一個(gè)元素賦值,但代碼卻引用了一個(gè)不存在的變量 datas:
data = [1, 4, 8]
# the variable datas does not exist!
datas[0] = 2
在 Python 3.10 之前的版本中,這會(huì)導(dǎo)致錯(cuò)誤跟蹤,指出變量 datas 不存在:
$ uv run --python 3.9 --no-project mistake.py
Traceback (most recent call last):
File "/Users/adamgreen/data-science-south-neu/mistake.py", line 3, in <module>
datas[0] = 2
NameError: name 'datas' is not defined
Python 3.11 將其診斷向前推進(jìn)了兩步,還提供了一種解決方案,即變量應(yīng)改名為 data,并指出錯(cuò)誤發(fā)生在哪一行:
$ uv run --python 3.11 --no-project mistake.py
Traceback (most recent call last):
File "/Users/adamgreen/data-science-south-neu/mistake.py", line 3, in <module>
datas[0] = 2
^^^^^
NameError: name 'datas' is not defined. Did you mean: 'data'?
uv
學(xué)習(xí) Python 最難的是學(xué)會(huì)安裝和管理 Python。即使是資深開發(fā)人員,也會(huì)為管理 Python 的復(fù)雜性而苦惱,尤其是當(dāng) Python 不是他們的主要語(yǔ)言時(shí)。
圖片
uv[1] 是一個(gè)功能強(qiáng)大的 Python 版本管理工具,旨在簡(jiǎn)化開發(fā)者在本地環(huán)境中管理和切換不同 Python 版本的過程。與傳統(tǒng)的 Python 版本管理工具(如 pyenv、miniconda 或通過下載安裝程序手動(dòng)安裝 Python)相比,uv 提供了一種更加高效和便捷的解決方案。
圖片
主要功能
- Python 版本管理:uv 允許用戶輕松安裝、切換和管理多個(gè) Python 版本。無論是 Python 3.7、3.8 還是最新的 3.12 版本,uv 都能快速響應(yīng)并下載所需的版本。
- 自動(dòng)下載與安裝:當(dāng)用戶運(yùn)行指定 Python 版本的命令或腳本時(shí),如果該版本尚未安裝,uv 會(huì)自動(dòng)下載并安裝所需的 Python 版本。這一功能極大地簡(jiǎn)化了開發(fā)環(huán)境的配置過程,避免了手動(dòng)下載和安裝的繁瑣步驟。
- 跨平臺(tái)支持:uv 支持多種操作系統(tǒng),包括 Windows、macOS 和 Linux,確保開發(fā)者可以在不同的平臺(tái)上使用相同的工具來管理 Python 版本。
- 輕量級(jí)與高效:uv 的設(shè)計(jì)注重性能,啟動(dòng)速度快,資源占用低,能夠在不影響系統(tǒng)性能的情況下高效管理多個(gè) Python 版本。
優(yōu)勢(shì)
- 簡(jiǎn)化復(fù)雜性:uv 通過自動(dòng)化 Python 版本的下載和安裝,大大減少了開發(fā)者在配置開發(fā)環(huán)境時(shí)的工作量。
- 靈活性:uv 不僅支持管理 Python 版本,還可以與現(xiàn)有的虛擬環(huán)境工具(如 virtualenv 或 venv)結(jié)合使用,提供更加靈活的開發(fā)環(huán)境管理方案。
- 社區(qū)支持:uv 是一個(gè)開源工具,擁有活躍的社區(qū)支持,開發(fā)者可以通過社區(qū)獲取幫助、分享經(jīng)驗(yàn),并參與工具的改進(jìn)。
下面的命令使用 Python 3.12 運(yùn)行 "hello world" 程序:
$ uv run --python 3.12 --no-project python -c "print('hello world')"
hello
uv 也是一個(gè)用 Python 管理虛擬環(huán)境的工具。它是 venv 或 miniconda 的替代工具。虛擬環(huán)境允許不同的 Python 安裝并存,這樣就可以在本地處理不同的項(xiàng)目。
下面的命令創(chuàng)建了一個(gè) Python 3.11 的虛擬環(huán)境:
$ uv venv --python 3.11
Using CPython 3.11.10
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
你需要使用 $ source activate .venv/bin 激活虛擬環(huán)境。
uv 也是一個(gè)管理 Python 依賴關(guān)系和軟件包的工具。它是 pip 的替代品。Pip、Poetry 和 uv 都可以用來安裝和升級(jí) Python 軟件包。
下面是一個(gè) uv 管理項(xiàng)目的示例 pyproject.toml:
[project]
name = "hypermodern"
version = "0.0.1"
requires-python = ">=3.11,<3.12"
dependencies = [
"pandas>=2.0.0",
"requests>=2.31.0"
]
[project.optional-dependencies]
test = ["pytest>=7.0.0"]
將 uv pip install 指向我們的 pyproject.toml 即可安裝項(xiàng)目:
$ uv pip install -r pyproject.toml
Resolved 11 packages in 1.69s
Installed 11 packages in 61ms
+ certifi==2024.12.14
+ charset-normalizer==3.4.0
+ idna==3.10
+ numpy==2.2.0
+ pandas==2.2.3
+ python-dateutil==2.9.0.post0
+ pytz==2024.2
+ requests==2.32.3
+ six==1.17.0
+ tzdata==2024.2
+ urllib3==2.2.3
和 Poetry 一樣,uv 可以將依賴關(guān)系鎖定到 uv.lock:
$ uv lock
Resolved 17 packages in 5ms
uv 也可以用來添加工具,即全局可用的 Python 工具。下面的命令安裝了 pytest 工具,我們可以在任何地方使用它:
$ uv tool install --python 3.11 pytest
Resolved 4 packages in 525ms
Installed 4 packages in 7ms
+ inicnotallow==2.0.0
+ packaging==24.2
+ pluggy==1.5.0
+ pytest==8.3.4
Installed 2 executables: py.test, pytest
這將添加虛擬環(huán)境外可用的程序:
$ which pytest
/Users/adamgreen/.local/bin/pytest
Tips: 在 direnv 工具中添加 .envrc,以便在進(jìn)入目錄時(shí)自動(dòng)切換到正確的 Python 版本。
ruff
Ruff[2] 是一個(gè)現(xiàn)代化的、高性能的 Python 代碼檢查和格式化工具,旨在為開發(fā)者提供一種更快、更高效的代碼質(zhì)量保障方案。作為 Black、autopep8、Flake8 和 isort 等傳統(tǒng)工具的替代品,Ruff 憑借其獨(dú)特的設(shè)計(jì)和強(qiáng)大的功能,正在成為 Python 開發(fā)者工具箱中的重要一員。
核心特點(diǎn)
- 極速性能:Ruff 的最大亮點(diǎn)是其卓越的性能。由于它是用 Rust 語(yǔ)言編寫的,Ruff 在代碼分析和格式化方面的速度遠(yuǎn)超許多基于 Python 的工具。無論是小型項(xiàng)目還是大型代碼庫(kù),Ruff 都能在幾秒內(nèi)完成代碼檢查和格式化,顯著提升了開發(fā)效率。
- 全面的規(guī)則覆蓋:Ruff 不僅支持 Flake8 規(guī)則集的大部分內(nèi)容,還整合了 isort 等其他工具的規(guī)則。這意味著開發(fā)者可以通過 Ruff 一次性完成代碼風(fēng)格檢查、語(yǔ)法錯(cuò)誤檢測(cè)、導(dǎo)入排序等多種任務(wù),而無需依賴多個(gè)工具。
- 高度可配置:Ruff 提供了靈活的配置選項(xiàng),允許開發(fā)者根據(jù)項(xiàng)目需求自定義規(guī)則集和行為。無論是啟用或禁用特定規(guī)則,還是調(diào)整格式化風(fēng)格,Ruff 都能輕松滿足不同團(tuán)隊(duì)和項(xiàng)目的需求。
- 輕量級(jí)與易集成:Ruff 的設(shè)計(jì)注重簡(jiǎn)潔和易用,無需復(fù)雜的依賴或配置即可快速集成到現(xiàn)有項(xiàng)目中。它支持與常見的開發(fā)工具(如 VS Code、PyCharm 等)和 CI/CD 流水線無縫集成,幫助開發(fā)者在整個(gè)開發(fā)周期中保持代碼質(zhì)量。
優(yōu)勢(shì)
- 速度與效率:Ruff 的極速性能使其在處理大型代碼庫(kù)時(shí)表現(xiàn)出色,顯著減少了等待時(shí)間,提升了開發(fā)體驗(yàn)。
- 多功能一體化:Ruff 集成了多種工具的功能,避免了開發(fā)者需要在不同工具之間切換的麻煩,簡(jiǎn)化了工作流程。
- 現(xiàn)代化設(shè)計(jì):基于 Rust 的實(shí)現(xiàn)不僅帶來了性能上的優(yōu)勢(shì),還使 Ruff 更加穩(wěn)定和可靠,適合現(xiàn)代開發(fā)環(huán)境的需求。
與現(xiàn)有工具的對(duì)比
- 與 Black 相比:Ruff 不僅提供了代碼格式化功能,還集成了代碼檢查的能力,功能更加全面。
- 與 Flake8 相比:Ruff 的速度更快,且支持更多的規(guī)則集,同時(shí)避免了 Flake8 需要安裝多個(gè)插件的復(fù)雜性。
- 與 isort 相比:Ruff 可以直接處理導(dǎo)入排序問題,而無需額外安裝和配置 isort。
圖片
下面的代碼有三個(gè)問題:
- 我們使用了一個(gè)未定義的變量 datas。
- 導(dǎo)入的位置不對(duì)。
- 導(dǎo)入了我們不用的東西。
data = datas[0]
import collections
在同一目錄下運(yùn)行 Ruff 會(huì)發(fā)現(xiàn)問題:
$ ruff check .
ruff.py:1:8: F821 Undefined name `datas`
ruff.py:2:1: E402 Module level import not at top of file
ruff.py:2:8: F401 [*] `collections` imported but unused
Found 3 errors.
[*] 1 potentially fixable with the --fix option.
Tips: 在開發(fā)過程中,Ruff 在保存文件時(shí)運(yùn)行足夠快--確保在文本編輯器中配置了保存時(shí)的格式設(shè)置
mypy
mypy[3] 是一個(gè)強(qiáng)大的靜態(tài)類型檢查工具,專門為 Python 設(shè)計(jì),旨在通過引入類型注解和類型檢查機(jī)制,提升代碼的可靠性和可維護(hù)性。它允許開發(fā)者在 Python 中實(shí)現(xiàn)類型安全,從而減少運(yùn)行時(shí)錯(cuò)誤,并提高代碼的可讀性和可維護(hù)性。與傳統(tǒng)的動(dòng)態(tài)類型 Python 開發(fā)方式不同,mypy 提供了一種更接近靜態(tài)類型語(yǔ)言的開發(fā)體驗(yàn),類似于 TypeScript 對(duì) JavaScript 的增強(qiáng)。
圖片
核心功能
- 類型注解支持:mypy 允許開發(fā)者在 Python 代碼中使用類型注解(Type Annotations),例如變量、函數(shù)參數(shù)和返回值的類型聲明。這些注解不僅提高了代碼的可讀性,還為靜態(tài)類型檢查提供了基礎(chǔ)。
- 靜態(tài)類型檢查:mypy 在代碼運(yùn)行之前對(duì)類型注解進(jìn)行靜態(tài)分析,檢查類型是否一致。它可以捕捉到許多在運(yùn)行時(shí)才會(huì)暴露的錯(cuò)誤,例如類型不匹配、未定義的屬性調(diào)用等。
- 漸進(jìn)式類型:mypy 支持漸進(jìn)式類型系統(tǒng),這意味著開發(fā)者可以逐步為現(xiàn)有代碼添加類型注解,而不需要一次性重構(gòu)整個(gè)代碼庫(kù)。這種靈活性使得 mypy 非常適合在大型項(xiàng)目或已有項(xiàng)目中引入類型檢查。
- 與 Python 生態(tài)系統(tǒng)的兼容性:mypy 完全兼容 Python 的標(biāo)準(zhǔn)庫(kù)和第三方庫(kù),并且支持許多流行的 Python 框架(如 Django、Flask 等)。此外,mypy 還可以與 IDE(如 VS Code、PyCharm)集成,提供實(shí)時(shí)的類型檢查反饋。
優(yōu)勢(shì)
- 提前發(fā)現(xiàn)錯(cuò)誤:mypy 在代碼運(yùn)行之前就能捕捉到類型相關(guān)的錯(cuò)誤,避免了運(yùn)行時(shí)崩潰或異常。
- 提高代碼可讀性:類型注解使代碼的意圖更加清晰,開發(fā)者可以更容易理解函數(shù)和類的輸入輸出類型。
- 增強(qiáng)開發(fā)工具支持:mypy 與主流 IDE 和編輯器的集成,提供了實(shí)時(shí)的類型檢查和自動(dòng)補(bǔ)全功能,顯著提升了開發(fā)效率。
- 漸進(jìn)式采用:mypy 允許開發(fā)者逐步引入類型注解,無需一次性重構(gòu)整個(gè)代碼庫(kù),降低了采用的門檻。
mypy_error.py 有一個(gè)問題--我們?cè)噲D將一個(gè)字符串除以 10:
def process(user):
# line below causes an error
user['name'] / 10
user = {'name': 'alpha'}
process(user)
我們可以通過運(yùn)行 mypy 來捕獲這個(gè)錯(cuò)誤--捕獲錯(cuò)誤而不實(shí)際執(zhí)行 Python 代碼:
$ mypy --strict mypy_error.py
mypy_error.py:1: error: Function is missing a type annotation
mypy_error.py:5: error: Call to untyped function "process" in typed context
Found 2 errors in 1 file (checked 1 source file)
第一個(gè)錯(cuò)誤是因?yàn)槲覀兊拇a沒有類型化 - 我們可以添加兩個(gè)類型注解,使我們的代碼類型化:
- user: dict[str,str] - user 是一個(gè)以字符串為鍵和值的字典、
- -> None: - process 函數(shù)返回 None。
def process(user: dict[str,str]) -> None:
user['name'] / 10
user = {'name': 'alpha'}
process(user)
在 mypy_intermediate.py 上運(yùn)行 mypy,mypy 指出了代碼中的錯(cuò)誤:
$ mypy --strict mypy_intermediate.py
mypy_fixed.py:2: error: Unsupported operand types for / ("str" and "int")
Found 1 error in 1 file (checked 1 source file)
這是一個(gè)無需編寫任何特定測(cè)試邏輯即可運(yùn)行的測(cè)試。
Tips: 在調(diào)試類型問題時(shí),在代碼中使用 reveal_type(變量)。mpy 會(huì)向你顯示它認(rèn)為變量的類型。
Typer
Typer[4] 是一個(gè)基于 Python 類型提示構(gòu)建命令行界面 (CLI) 的強(qiáng)大工具,旨在為開發(fā)者提供一種更簡(jiǎn)潔、更直觀的方式來創(chuàng)建命令行應(yīng)用程序。與傳統(tǒng)的 sys.argv 或 argparse 相比,Typer 充分利用了 Python 的類型注解功能,使得 CLI 的開發(fā)更加高效和易于維護(hù)。
圖片
核心特點(diǎn)
- 基于類型提示:Typer 使用 Python 的類型注解(Type Hints)來定義命令行參數(shù)和選項(xiàng),使得代碼更加清晰和類型安全。
- 自動(dòng)生成幫助文檔:Typer 會(huì)根據(jù)類型注解自動(dòng)生成命令行幫助文檔,開發(fā)者無需手動(dòng)編寫復(fù)雜的幫助信息。
- 簡(jiǎn)潔的 API:Typer 的 API 設(shè)計(jì)非常簡(jiǎn)潔,開發(fā)者只需幾行代碼即可實(shí)現(xiàn)復(fù)雜的命令行功能。
- 強(qiáng)大的子命令支持:Typer 支持嵌套子命令,使得開發(fā)者可以輕松構(gòu)建復(fù)雜的命令行工具。
- 與 Click 的兼容性:Typer 基于 Click 構(gòu)建,因此完全兼容 Click 的功能,同時(shí)提供了更現(xiàn)代化的開發(fā)體驗(yàn)。
優(yōu)勢(shì)
- 開發(fā)效率高:Typer 的簡(jiǎn)潔 API 和自動(dòng)生成幫助文檔的功能顯著提升了開發(fā)效率。
- 代碼可讀性強(qiáng):基于類型提示的代碼更加清晰和易于理解。
- 類型安全:Typer 的類型檢查功能可以在開發(fā)階段捕捉到潛在的錯(cuò)誤,減少運(yùn)行時(shí)問題。
首先創(chuàng)建一個(gè)虛擬環(huán)境:
$ uv venv --pythnotallow=3.11.10
Using CPython 3.11.10
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
然后使用 uv init 從頭開始創(chuàng)建一個(gè)新項(xiàng)目:
$ uv init --name demo --python 3.11.10 --package
Initialized project `demo`
這樣就創(chuàng)建了一個(gè)項(xiàng)目:
$ tree
.
├── pyproject.toml
├── README.md
└── src
└── demo
└── __init__.py
然后,我們可以使用 uv add 將 typer 添加為依賴關(guān)系:
$ uv add typer
Using CPython 3.11.10
Creating virtual environment at: .venv
Resolved 10 packages in 2ms
Installed 8 packages in 9ms
+ click==8.1.8
+ markdown-it-py==3.0.0
+ mdurl==0.1.2
+ pygments==2.18.0
+ rich==13.9.4
+ shellingham==1.5.4
+ typer==0.15.1
+ typing-extensinotallow==4.12.2
然后,我們添加修改 Python 文件 src/demo/__init__.py,使其包含一個(gè)簡(jiǎn)單的 CLI:
import typer
app = typer.Typer()
@app.command()
def main(name: str) -> None:
print(f"Hello {name}")
我們需要將此添加到 pyproject.toml 中,以便使用 demo 命令運(yùn)行 CLI:
demo = "demo:app"
這是完整的 pyproject.toml:
[project]
name = "demo"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
authors = [
{ name = "Adam Green", email = "adam.green@adgefficiency.com" }
]
requires-python = ">=3.11.10"
dependencies = [
"typer>=0.15.1",
]
[project.scripts]
demo = "demo:app"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
由于我們?cè)?pyproject.toml 中包含了 [project.scripts],因此可以使用 uv run 運(yùn)行此 CLI:
$ uv run demo omega
Hello omega
Typer 為我們免費(fèi)提供了“--help ”標(biāo)志:
$ python src/demo/__init__.py --help
Usage: demo [OPTIONS] NAME
╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────╮
│ * name TEXT [default: None] [required] │
╰──────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────╮
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell, to copy it or customize │
│ the installation. │
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────╯
Tips: 你可以在 Typer 中使用命令和命令組創(chuàng)建嵌套的 CLI 組。
Rich
Rich[5] 是一個(gè)功能強(qiáng)大的 Python 庫(kù),專門用于在終端中輸出美觀、格式化的文本內(nèi)容。它通過豐富的樣式、顏色、表格、進(jìn)度條等功能,徹底改變了傳統(tǒng) Python 程序單調(diào)乏味的終端輸出方式,為開發(fā)者提供了一種更加直觀和優(yōu)雅的展示方式。無論是調(diào)試信息、日志記錄,還是數(shù)據(jù)展示,Rich 都能讓你的終端輸出煥然一新。
圖片
核心功能
- 豐富的文本樣式:Rich 支持多種文本樣式,包括顏色、粗體、斜體、下劃線、背景色等。開發(fā)者可以輕松地為終端輸出添加視覺層次,使其更具可讀性和吸引力。
- 表格輸出:Rich 提供了強(qiáng)大的表格功能,支持自動(dòng)調(diào)整列寬、對(duì)齊方式、邊框樣式等。無論是展示數(shù)據(jù)還是生成報(bào)告,Rich 的表格功能都能讓信息更加清晰和結(jié)構(gòu)化。
- 進(jìn)度條:Rich 內(nèi)置了多種進(jìn)度條樣式,支持實(shí)時(shí)更新和多任務(wù)進(jìn)度跟蹤。這對(duì)于長(zhǎng)時(shí)間運(yùn)行的任務(wù)(如數(shù)據(jù)處理、文件下載等)非常有用,能夠直觀地展示任務(wù)進(jìn)度。
- 語(yǔ)法高亮:Rich 支持代碼片段的語(yǔ)法高亮,能夠自動(dòng)識(shí)別多種編程語(yǔ)言(如 Python、JSON、Markdown 等),并在終端中以彩色形式展示代碼。
- Markdown 渲染:Rich 可以直接在終端中渲染 Markdown 文檔,支持標(biāo)題、列表、代碼塊、鏈接等 Markdown 語(yǔ)法,使得文檔展示更加美觀。
- 日志格式化:Rich 提供了高度可定制的日志格式化功能,開發(fā)者可以為日志添加顏色、時(shí)間戳、調(diào)用棧信息等,使得日志記錄更加直觀和易于分析。
優(yōu)勢(shì)
- 提升可讀性:Rich 的豐富樣式和顏色使得終端輸出更加直觀和易于理解。
- 簡(jiǎn)化開發(fā):Rich 提供了簡(jiǎn)單易用的 API,開發(fā)者只需幾行代碼即可實(shí)現(xiàn)復(fù)雜的終端輸出效果。
- 高度可定制:Rich 支持多種自定義選項(xiàng),開發(fā)者可以根據(jù)需求調(diào)整輸出樣式和格式。
- 跨平臺(tái)支持:Rich 在 Windows、macOS 和 Linux 上都能完美運(yùn)行,確保開發(fā)者可以在不同平臺(tái)上獲得一致的體驗(yàn)。
Rich 的特點(diǎn)是打印出漂亮的顏色和表情符號(hào):
import rich
user = {'name': 'omega', 'id': 'invalid'}
print(f" normal printing\nuser {user}\n")
rich.print(f" :wave: rich printing\nuser {user}\n")
normal printing
user {'name': 'omega', 'id': 'invalid'}
?? rich printing
user {'name': 'omega', 'id': 'invalid'}
Features
如果你對(duì) Rich 感興趣,可以用 Rich 打印代替內(nèi)置打印,從而簡(jiǎn)化代碼:
from rich.console import Console
from rich.table import Table
from rich.progress import track
import time
# 創(chuàng)建 Console 對(duì)象
console = Console()
# 輸出彩色文本
console.print("[bold red]Hello, [green]Rich[/green]![/bold red]")
# 創(chuàng)建表格
table = Table(title="示例表格")
table.add_column("ID", justify="right", style="cyan")
table.add_column("名稱", style="magenta")
table.add_column("描述", style="green")
table.add_row("1", "Python", "一種流行的編程語(yǔ)言")
table.add_row("2", "Rich", "一個(gè)終端美化工具")
console.print(table)
# 進(jìn)度條示例
for i in track(range(10), descriptinotallow="處理中..."):
time.sleep(0.5)
此外,Rich 有一個(gè)檢查功能,可以對(duì)任何 Python 對(duì)象(例如類、實(shí)例或內(nèi)置對(duì)象)生成報(bào)告。
my_list = ["foo", "bar"]
from rich import inspect
inspect(my_list, methods=True)
日志
Tips: Rich 提供了比顏色和表情符號(hào)更多的功能,包括顯示表格數(shù)據(jù)和更好的 Python 錯(cuò)誤回溯。
寫在最后
最后我們對(duì)本次分享做個(gè)總結(jié):
uv 是一個(gè)現(xiàn)代化的 Python 版本管理工具,通過其自動(dòng)化、高效和跨平臺(tái)的特點(diǎn),幫助開發(fā)者更輕松地管理復(fù)雜的 Python 開發(fā)環(huán)境。無論是個(gè)人開發(fā)者還是團(tuán)隊(duì),uv 都能顯著提升開發(fā)效率和環(huán)境配置的便捷性。
Ruff 是一個(gè)集速度、功能和易用性于一體的 Python 代碼工具,適合希望提升代碼質(zhì)量和開發(fā)效率的開發(fā)者。無論是個(gè)人項(xiàng)目還是團(tuán)隊(duì)協(xié)作,Ruff 都能成為你的得力助手,幫助你更輕松地編寫高質(zhì)量的 Python 代碼。
mypy 作為 Python 靜態(tài)類型檢查的領(lǐng)先工具,正在幫助開發(fā)者構(gòu)建更可靠、更易維護(hù)的代碼。隨著 Python 社區(qū)對(duì)靜態(tài)類型的接受度不斷提高,mypy 將成為現(xiàn)代 Python 開發(fā)中不可或缺的一部分。
Typer 是一個(gè)現(xiàn)代化的 Python CLI 開發(fā)工具,通過其簡(jiǎn)潔的 API 和強(qiáng)大的類型提示功能,幫助開發(fā)者快速構(gòu)建高效、易維護(hù)的命令行應(yīng)用程序。結(jié)合 uv 的環(huán)境管理能力,開發(fā)者可以更輕松地配置和部署 Python 項(xiàng)目。無論是個(gè)人項(xiàng)目還是團(tuán)隊(duì)工具,Typer 都能顯著提升開發(fā)效率和代碼質(zhì)量。
Rich 是一個(gè)現(xiàn)代化的 Python 終端美化工具,通過其豐富的功能和簡(jiǎn)潔的 API,幫助開發(fā)者以更美觀、更直觀的方式展示終端輸出。無論是調(diào)試信息、數(shù)據(jù)展示,還是日志記錄,Rich 都能顯著提升終端輸出的質(zhì)量和用戶體驗(yàn)。如果你厭倦了單調(diào)的終端輸出,Rich 無疑是你的理想選擇。
參考資料
[1]uv: https://docs.astral.sh/uv/
[2]Ruff: https://docs.astral.sh/ruff/
[3]mypy: http://www.mypy-lang.org/
[4]Typer: https://typer.tiangolo.com/
[5]Rich: https://rich.readthedocs.io/en/stable/