类型提示与虚拟环境
为什么要虚拟环境
不同项目依赖版本不同。虚拟环境把依赖隔离在项目目录内,避免污染全局 Python。
入门篇对比过 pip / venv / uv;这里落到「同一件事」的两种完整工作流。
工作流对照
| 步骤 | 传统:venv + pip | uv 项目流(推荐) |
|---|---|---|
| 建项目/环境 | python3 -m venv .venv → activate | uv init(自动管环境) |
| 加依赖 | pip install requests + 手改 requirements.txt | uv add requests(写 pyproject.toml + 锁文件) |
| 复现环境 | pip install -r requirements.txt | uv sync |
| 运行 | activate 后 python app.py | uv run app.py |
| 依赖清单 | 常见 requirements.txt(可再配合 pip-tools 锁版本) | pyproject.toml + uv.lock |
选型建议:
- 新项目:走 uv 项目流,少记工具、锁版本更省心
- 已有 pip 仓库:可先
uv venv+uv pip install -r requirements.txt,不必立刻改成pyproject.toml - 协作约定:团队统一一种;混用时分清「改的是 requirements 还是 pyproject」
传统方式:venv + pip
python3 -m venv .venv
# macOS / Linux
source .venv/bin/activate
# Windows
# .venv\Scripts\activate
python -m pip install -U pip
python -m pip install requests
停用:deactivate。
把 .venv/ 加入 .gitignore,用 requirements.txt 或锁文件共享依赖列表。
虚拟环境绑定 某一个 解释器版本;要并存多个 Python(3.10 与 3.12 等)见「多版本管理」。
推荐:用 uv 管理项目
新建项目
uv init hello-world
cd hello-world
会生成 pyproject.toml 等基础文件;依赖写入其中,并由 uv.lock 锁定版本。
添加依赖与同步环境
uv add requests # 写入 pyproject.toml,并安装到项目环境
uv sync # 按锁文件同步环境(克隆仓库后常用)
只想沿用「类 pip」命令、暂不改项目结构时:
uv venv # 默认创建 .venv
source .venv/bin/activate
uv pip install requests
# 或
uv pip install -r requirements.txt
uv pip ≈ 更快的 pip;uv add / uv sync 才是项目级依赖管理。
运行
无需手动 activate 也能跑:
uv run python hello.py
# 或
uv run hello.py
uv run 会按项目配置使用对应环境。
更完整的依赖声明、锁文件、dev/prod 约定见「项目与包管理」。
类型提示基础
类型提示主要给人和工具(如 pyright / mypy)看,默认不改变运行时行为:
def add(a: int, b: int) -> int:
return a + b
def greet(name: str, times: int = 1) -> str:
return (name + "!") * times
常用容器注解(3.9+ 可直接用内置泛型):
def head(items: list[int]) -> int | None:
return items[0] if items else None
int | None 需要 Python 3.10+(本模块约定版本)。
要点
- 每个项目一个隔离环境(venv 或 uv 项目环境)
- 分清两条路:
venv + pip(或uv pip)vsuv add/uv sync - 新项目优先
uv init/uv add/uv run;细节见「项目与包管理」 - 类型提示提升可读性与 IDE/检查器体验
- 本站示例按 3.10+ 书写(
list[int]、X | Y)