The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

uv 與 uvx 命令全攻略:Python 開發者的極速工具指南

uv 是一個極速的 Python 套件與專案管理工具,由 Astral 團隊使用 Rust 開發。它整合了套件安裝、虛擬環境管理、Python 版本管理等功能,執行速度比傳統的 pip、virtualenv 快上 10-100 倍。本文整理了日常開發中最常用的 uv 命令,依照使用情境分類,方便快速查閱。

Image

建立專案

  • 初始化當前目錄為專案

    uv init
    

    在當前目錄中建立新專案,預設會建立 .gitignore, .python-version, main.py, pyproject.tomlREADME.md 檔案。

  • 在指定目錄中建立專案

    uv init myproj
    

    myproj 子目錄中建立新專案,目錄不存在時會自動建立。

  • 建立可封裝的應用程式 (CLI、Web 等)

    uv init --app myapp
    

    使用 --app 建立應用程式專案,會在 myapp/ 目錄中建立 src/myapp/ 結構,並包含 __main__.py 作為程式進入點,適合開發命令列工具或 Web 應用程式。

  • 建立可封裝的函式庫 (可被 import)

    uv init --lib mylib
    

    使用 --lib 建立函式庫專案,會在 mylib/ 目錄中建立 src/mylib/ 結構,並設定 pyproject.toml 為可發布的套件格式,適合開發可供其他專案使用的模組。

  • 指定使用特定 Python 版本

    uv init --python 3.12
    

    使用 --python 參數指定專案的 Python 版本要求,會在 pyproject.toml 中設定 requires-python,並建立 .python-version 檔案。

操作腳本

  • 初始化獨立腳本

    uv init --script myscript.py
    

    使用 --script 建立獨立的 Python 腳本檔案,會在檔案頂部加入特殊的內嵌依賴宣告區塊 (PEP 723),讓腳本可以獨立管理自己的依賴套件,無需完整的專案結構。

  • 初始化腳本並指定 Python 版本

    uv init --script myscript.py --python 3.12
    

    建立腳本時指定 Python 版本要求,會在腳本的依賴宣告區塊中加入 requires-python 設定。

  • 在隔離環境中執行腳本

    uv run myscript.py
    

    自動偵測腳本的依賴需求並在隔離的虛擬環境中執行,若腳本包含依賴宣告會自動安裝所需套件。

  • 執行腳本並臨時加載額外依賴

    uv run --with click myscript.py
    

    使用 --with 參數臨時加入額外的套件依賴,適合快速測試或執行需要額外套件的腳本,這些依賴不會寫入腳本檔案。

  • 將依賴加入腳本環境 (可用 remove 移除)

    uv add --script myscript.py click
    

    將套件永久加入腳本的內嵌依賴宣告中,修改後的依賴會保存在腳本檔案內。

管理專案依賴

  • 查看目前專案版本號

    uv version
    

    顯示專案目前的版本號,會讀取 pyproject.toml 中的 version 欄位。

  • 新增依賴套件 (可一次指定多個)

    uv add requests httpx
    

    將套件加入專案的 pyproject.toml 並更新 uv.lock,可同時指定多個套件。套件會自動安裝到專案的虛擬環境中。

  • 移除依賴套件

    uv remove requests
    

    從專案中移除指定的套件依賴,同時更新 pyproject.tomluv.lock 及虛擬環境。

  • 加入開發依賴

    uv add --dev pytest ruff
    

    使用 --dev 將套件加入為開發依賴,這些套件只在開發環境中需要,發布時不會被包含。適合測試工具、格式化工具等。

  • 執行已安裝於專案的套件工具

    uv run pytest
    

    在專案虛擬環境中執行已安裝的命令列工具,會自動同步專案依賴後執行。

  • 顯示依賴樹狀結構

    uv tree
    

    以樹狀圖顯示專案的依賴關係,包含直接依賴和間接依賴 (子依賴),有助於理解套件之間的關聯性。

  • 更新所有依賴到最新版本

    uv lock --upgrade
    

    更新 uv.lock 中的所有套件到符合版本限制的最新版本,不會修改 pyproject.toml 中的版本要求。

  • 從 requirements.txt 批次加入依賴

    uv add -r requirements.txt
    

    從現有的 requirements.txt 檔案讀取並加入所有套件到專案中,方便從舊專案遷移。

專案建置與發布

  • 建置專案

    uv build
    

    將專案建置成發行套件,會產生 source distribution (.tar.gz) 和 wheel (.whl) 檔案到 dist/ 目錄。建置前需確保 pyproject.toml 正確設定專案資訊。

  • 發佈專案到 PyPI

    uv publish
    

    將建置好的套件上傳到 PyPI 或其他套件索引。需要先設定認證資訊,預設會發布 dist/ 目錄中的所有檔案。

Python 版本管理

  • 列出系統中所有可用的 Python 版本

    uv python list
    

    顯示系統中所有已安裝的 Python 版本,包含 uv 管理的版本和系統原有的版本。

  • 安裝指定 Python 版本

    uv python install 3.13
    

    下載並安裝指定的 Python 版本,uv 會自動管理這些版本,不會影響系統的 Python 安裝。支援精確版本號 (如 3.13.1) 或主要版本號 (如 3.13)。

  • 移除已安裝的 Python 版本

    uv python uninstall 3.13
    

    移除 uv 管理的特定 Python 版本,不會影響系統安裝的 Python。

  • 升級 uv 管理的 Python 版本

    uv python upgrade
    

    將所有 uv 管理的 Python 版本升級到各自系列的最新版本。

  • 鎖定專案使用的 Python 版本

    uv python pin 3.12
    

    在專案目錄建立 .python-version 檔案,鎖定專案使用的 Python 版本。之後在該專案執行 uv run 等命令時會自動使用指定版本。

  • 執行對應 Python (自動偵測專案版本)

    uv run python
    

    執行 Python 直譯器,會自動使用專案指定的 Python 版本 (透過 .python-versionpyproject.toml)。

  • 強制使用指定 Python 版本執行

    uv run --python 3.12 python
    

    使用 --python 參數臨時指定要使用的 Python 版本,會覆蓋專案設定。

工具管理

  • 全域安裝工具

    uv tool install ruff
    

    全域安裝 Python 命令列工具,安裝後可在任何地方直接執行。工具會安裝在獨立的環境中,避免依賴衝突。

  • 安裝工具並包含額外依賴

    uv tool install ipython --with matplotlib
    

    使用 --with 在安裝工具時同時安裝額外的套件依賴,這些依賴會包含在工具的獨立環境中。

  • 以可編輯模式安裝目前專案

    uv tool install -e .
    

    將當前專案以可編輯模式 (editable mode) 安裝為全域工具,修改原始碼會立即反映到已安裝的工具中,適合開發階段測試。

  • 更新單一工具

    uv tool upgrade ruff
    

    將指定的工具升級到最新版本。

  • 更新所有已安裝工具

    uv tool upgrade --all
    

    一次性升級所有全域安裝的工具到最新版本。

  • 列出已安裝的工具

    uv tool list
    

    顯示所有透過 uv tool install 安裝的工具及其版本資訊。

  • 移除工具

    uv tool uninstall ruff
    

    移除全域安裝的工具及其獨立環境。

快速執行工具 (uvx)

uvxuv tool run 的簡寫別名,可以直接執行工具而不需要預先安裝,執行完畢後不會留下任何檔案。

  • 快速執行 Ruff 程式碼檢查

    uvx ruff check .
    

    臨時安裝並執行 Ruff 進行程式碼檢查,執行完畢後自動清理。適合快速測試工具或在 CI/CD 中使用。

  • 執行 Ruff 程式碼格式化

    uvx ruff format .
    

    使用 Ruff 格式化當前目錄的程式碼,無需預先安裝。

  • 執行 pytest 測試

    uvx pytest
    

    臨時執行 pytest 測試框架,適合快速測試或在沒有安裝 pytest 的環境中執行測試。

  • 執行 Black 格式化工具

    uvx black .
    

    使用 Black 格式化工具處理程式碼,無需全域安裝。

  • 執行 mypy 型別檢查

    uvx mypy src/
    

    src/ 目錄執行 mypy 型別檢查,臨時安裝後執行。

  • 使用 httpie 測試 API

    uvx httpie GET https://api.github.com
    

    快速使用 httpie 工具進行 API 測試,適合臨時需要的場景。

  • 執行特定套件中的工具

    uvx --from textual textual-demo
    

    使用 --from 指定套件來源,執行該套件提供的命令。這裡執行 textual 套件中的 demo 範例。

  • 執行 Jupyter Notebook

    uvx --from jupyter-core jupyter notebook
    

    臨時啟動 Jupyter Notebook,無需預先安裝整個 Jupyter 環境。

  • 使用 cookiecutter 建立專案範本

    uvx cookiecutter gh:audreyr/cookiecutter-pypackage
    

    使用 cookiecutter 從 GitHub 範本快速建立專案架構,執行後即清理。

  • 快速啟動 HTTP 伺服器

    uvx --from http.server http.server 8000
    

    啟動 Python 內建的 HTTP 伺服器,在 port 8000 提供當前目錄的檔案服務。

傳統工作流程支援

如果你習慣使用傳統的 Python 工作流程,uv 也完全支援:

  • 建立虛擬環境

    uv venv
    

    .venv 目錄建立虛擬環境,行為類似 python -m venv,但速度更快。

  • 建立虛擬環境並指定路徑與 Python 版本

    uv venv path/to/.venv --python 3.12
    

    在指定路徑建立虛擬環境,並使用特定的 Python 版本。

  • 使用 uv 的速度執行 pip 安裝

    uv pip install requests
    

    使用 uv pip 提供與 pip 相容的介面,但執行速度遠快於傳統 pip。需要在啟用虛擬環境後使用,或搭配 --system 參數。

  • 列出已安裝套件

    uv pip list
    

    列出當前環境中所有已安裝的套件,相容於 pip list 命令。

  • 匯出依賴清單

    uv pip freeze > requirements.txt
    

    將當前環境的套件清單匯出為 requirements.txt 格式,包含精確的版本號。

其他相關命令

  • 顯示命令說明

    uv help
    

    顯示 uv 命令的總體說明文件,包含所有可用的子命令參數

  • 顯示子命令說明

    以查詢 run 子命令用法為例:

    uv help run
    

    顯示特定子命令的詳細說明文件,比 --help 提供更完整的資訊。

    💡 Windows 用戶建立透過 Chocolatey 額外安裝 less 工具,以免顯示說明分頁時發生異常。

    choco install less
    
  • 查看 uv 版本

    uv self version
    

    顯示目前安裝的 uv 版本號。

  • 更新 uv 到最新版本

    uv self update
    

    將 uv 本身升級到最新發布版本,無需手動下載或重新安裝。

連結

留言評論