Skip to main content

类型提示与虚拟环境

为什么要虚拟环境

不同项目依赖版本不同。虚拟环境把依赖隔离在项目目录内,避免污染全局 Python。

入门篇对比过 pip / venv / uv;这里落到「同一件事」的两种完整工作流。

工作流对照

步骤传统:venv + pipuv 项目流(推荐)
建项目/环境python3 -m venv .venvactivateuv init(自动管环境)
加依赖pip install requests + 手改 requirements.txtuv add requests(写 pyproject.toml + 锁文件)
复现环境pip install -r requirements.txtuv sync
运行activatepython app.pyuv 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+(本模块约定版本)。

要点

  1. 每个项目一个隔离环境(venv 或 uv 项目环境)
  2. 分清两条路:venv + pip(或 uv pip)vs uv add / uv sync
  3. 新项目优先 uv init / uv add / uv run;细节见「项目与包管理」
  4. 类型提示提升可读性与 IDE/检查器体验
  5. 本站示例按 3.10+ 书写(list[int]X | Y