你以為在學習,其實是在跟環境拉扯
學 Python 的過程中,最常遇到的不是「看不懂錯誤訊息」,而是「我明明照做了,為什麼你的可以跑、我的不行」。
常見的三個痛點很固定,也很煩:
- 依賴管理:庫要自己裝、版本要自己顧。小專案還好,大一點就開始失控。
- 版本衝突:A 專案要
requests新版,B 專案偏偏卡在舊版。你一更新,另一個就壞。 - 環境復現:換電腦、換同事、換 CI,環境像失憶一樣,每次都要重新「講一遍道理」給它聽。
對傳統環境管理的抱怨
許多開發者對傳統的環境管理工具(如pip和virtualenv)表示不滿,主要原因包括:
無法準確記錄依賴關係:requirements.txt文件的可讀性差,無法自動鎖定庫版本。
環境復現不可靠:在不同的環境中,復現相同的依賴版本往往會出現問題。
手動管理繁瑣:需要不斷手動更新和維護環境。
別從 pip 裡裝,因為你不想先污染環境
UV 安裝本身很直白。官方提供下載器方式,通常也是最推薦的路徑。
- Windows:在 PowerShell 執行官方提供的安裝命令
- macOS / Linux:用對應的 shell 命令安裝
- 注意:雖然可以
pip install uv,但不建議,理由很現實:你正在用「需要被管理的環境」去安裝「環境管理工具」,一不小心就先把自己繞進去。
多版本 Python 管理:把「版本」變成可宣告的事實
UV 支援多版本 Python 管理,常用指令如下(你原本列的很完整):
uv python list:查看可用 Python 版本uv python install <版本號>:安裝指定版本uv python pin <版本號>:固定專案使用版本uv python uninstall <版本號>:移除版本
初始化專案只要:
uv init
它會幫你生成一套「可追蹤、可重現」的骨架(重點是你不必自己拼):
.gitignore:搭配 Git 版本控制用python-version:記錄專案 Python 版本pyproject.toml:依賴與配置(逐步取代 requirements.txt 的角色)README:專案說明uv.lock:鎖定檔,用來確保環境一致性
建立虛擬環境與執行
uv venv:建立虛擬環境uv run main.py:執行主程式
不需要一直切來切去、手動維護一堆狀態。
UV 會把該更新、該鎖定的事情做得比較自動化。
安裝與管理依賴:讓依賴回到「宣告」而不是「手作」
uv add <庫名>:新增第三方庫,並自動更新到 dependenciesuv add <庫名>==<版本號>:指定版本安裝uv pip install ...:仍可用,但更像「臨時處理」的管道,而不是主要工作流
環境復刻:用 uv.sync 把「重現」變成命令,而不是儀式
uv sync:依據pyproject.toml與uv.lock自動下載/同步依賴- 若你手上只有
requirements.txt:uv add -r requirements.txt:把舊世界先搬過來,再逐步收斂到新的管理方式
工具會進步,但時間不會等你
UV 的優勢你已經點得很清楚:快(Rust)、環境隔離、全局快取可重用。
對我來說,它最重要的不是「又一個新工具」,而是它讓環境管理變得比較像工程,而不是玄學。
如果不合適,當然可以退回傳統做法。風險不大。
真正的成本通常不是切換工具,而是你一次又一次重建同樣的環境、犯同樣的錯,還以為下一次會比較順。
時間不會給你後悔的機會。
它只會讓你在某一天回頭看見:你把太多夜晚,浪費在本來可以更簡單的事情上。
晚上很安靜。
你只想把專案跑起來。
不想跟環境吵架。
螢幕亮著。
錯誤訊息一行一行。
像在提醒你:有些問題跟努力無關。
你敲下 Enter。
等下載。
等編譯。
等它不要再出下一個錯。
那一刻其實很孤獨。
因為你知道——
你欠的不是技術,是時間。
On this day..
- [音樂]魏如萱 - 香格里拉 - 2012
- Burton 新婚快樂! - 2006

