Python venv pip uv

[Python] 環境建置

Python 本體裝起來很簡單,但實務上每個專案要獨立的虛擬環境、要鎖定依賴版本、可能還要切換 Python 版本。這篇把 Windows 上從零裝 Python、開虛擬環境、用 pip 與更現代的 uv 管理依賴一次串完,後面所有 Python 篇都假設這環境已經就位。

在 Windows 安裝 Python

python.org 下載 .exe,安裝時務必勾 Add Python to PATH。裝完開新的 PowerShell 驗證:

python --version
# Python 3.13.x

Windows 上裝了多個版本時,python 可能指到錯的那個。可以用 py -3.13 這種版本選擇器,或乾脆用 uv 統一管理(下面講)。

多版本管理:uv

不同專案用不同 Python 版本是常態。uv 是 Rust 寫的工具鏈管理器,極快、跨平台、整合套件管理一條搞定,現在的新專案首選:

# 用 PowerShell 的 winget 裝 uv(最簡單)
winget install --id=astral-sh.uv -e

# 或從官網一鍵腳本(PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

# 裝 Python
uv python install 3.13

# 在專案裡指定要用哪個版本
uv python pin 3.13

虛擬環境(venv)

每個專案開獨立虛擬環境是基本紀律,避免不同專案的套件版本互相打架。

# 建立
python -m venv .venv

# 啟用(PowerShell)
.venv\Scripts\Activate.ps1
# 啟用(cmd)
.venv\Scripts\activate.bat

# 退出
deactivate

PowerShell 第一次跑啟用腳本如果被擋,是執行原則的限制。一次性開放當前使用者:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

啟用後 pythonpip 都指向 .venv 內,與全域分離。

.venv 一律加進 .gitignore,不應 commit。

pip:套件管理

pip install requests              # 裝最新
pip install requests==2.32.0      # 指定版本
pip install "requests>=2.30,<3"   # 範圍
pip install -U requests           # 升級
pip uninstall requests

pip list                          # 列出已裝套件
pip show requests                 # 套件資訊
pip freeze > requirements.txt     # 鎖定版本到檔案
pip install -r requirements.txt   # 從檔案安裝

requirements.txt 與 pyproject.toml

兩個慣用檔:

requirements.txt(傳統):

requests==2.32.0
flask>=3.0,<4

pyproject.toml(PEP 621,現代專案標準):

[project]
name = "my-app"
version = "0.1.0"
requires-python = ">=3.10"
dependencies = [
  "requests>=2.30",
  "flask>=3.0",
]

[project.optional-dependencies]
dev = ["pytest", "ruff", "mypy"]

uv:建議的現代工作流

uv 一條命令搞定 Python、虛擬環境、依賴:

# 在資料夾起新專案(會建 .venv 與 pyproject.toml)
uv init my-app
cd my-app

# 加套件(自動寫入 pyproject.toml + uv.lock)
uv add requests
uv add --dev pytest

# 同步環境(裝齊 pyproject.toml + uv.lock 列的套件)
uv sync

# 跑命令(自動用專案 .venv,不用手動 activate)
uv run python main.py
uv run pytest

uv.lock 是版本鎖定檔,commit 進 git 確保所有人裝到一樣的版本。

第一支程式

hello.py

def greet(name):
    return f'Hello, {name}'

if __name__ == '__main__':
    print(greet('Jeremy'))

執行:

python hello.py
# 在虛擬環境裡(已 activate)也是同樣 python
# 或用 uv(不必手動 activate)
uv run python hello.py

if __name__ == '__main__': 這一行的意思是「只有在這個檔被直接執行(不是被 import)時才跑」。下一章會更詳細展開。

REPL 與 IPython

Python 自帶 REPL:

python
>>> 1 + 1
2
>>> exit()

更強大的互動環境用 IPython

pip install ipython
ipython

支援 tab 補全、? 查 docstring、!ls 跑 shell 命令、magic command(%timeit%paste)。

編輯器與 Linter

VS Code 配 Python extension 即可(內建 Pylance LSP)。常用工具:

工具用途
ruffLint + 格式化(取代 flake8 + black + isort,極快)
mypy靜態型別檢查(最後一篇會講)
pytest測試框架

ruff 一條搞定:

uv add --dev ruff
uv run ruff check .          # lint
uv run ruff format .         # 格式化

裝完 Python、開得起 venv、跑得起第一支 hello.py,環境就算就緒。下一篇進基本型別與資料結構,前面 def greet(name) 的 type hint 會在「型別提示」那篇正式展開。

Latest Updates

  • 2026.06.11 Content updated