跳到主要内容

包管理与虚拟环境

问题

Python 有哪些包管理工具?虚拟环境为什么重要?

答案

虚拟环境

虚拟环境隔离项目依赖,避免不同项目的包版本冲突:

# 内置 venv
python -m venv .venv
source .venv/bin/activate # Linux/macOS
.venv\Scripts\activate # Windows

# 安装依赖
pip install flask
pip freeze > requirements.txt
pip install -r requirements.txt

包管理工具对比

工具特点锁文件速度
pip + venv内置,最基础无(requirements.txt 非严格锁定)
Poetry依赖解析、发布、虚拟环境一体poetry.lock
uvRust 实现,极速uv.lock极快(10-100x)
PDMPEP 582、现代标准pdm.lock
Pipenvpip + virtualenv 封装Pipfile.lock

Poetry

# 初始化项目
poetry init

# 添加依赖
poetry add flask
poetry add --group dev pytest black

# 安装所有依赖
poetry install

# 运行命令
poetry run python app.py
pyproject.toml
[tool.poetry]
name = "myproject"
version = "0.1.0"
python = "^3.11"

[tool.poetry.dependencies]
flask = "^3.0"

[tool.poetry.group.dev.dependencies]
pytest = "^8.0"
black = "^24.0"

uv(2024 年新星)

# 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 创建项目
uv init myproject
cd myproject

# 添加依赖(极速)
uv add flask
uv add --dev pytest ruff

# 运行
uv run python app.py

# 同步依赖
uv sync

常见面试问题

Q1: requirements.txt 和 lock 文件的区别?

答案

  • requirements.txt:通常记录直接依赖,版本范围宽泛(flask>=3.0
  • Lock 文件(poetry.lockuv.lock):锁定所有依赖(包括间接依赖)的精确版本和 hash

生产环境应使用 lock 文件确保可复现构建。

Q2: 推荐哪个包管理器?

答案

  • 新项目首选 uv——速度极快,兼容 pip 生态
  • 已有项目用 Poetry 的继续用 Poetry
  • 简单脚本用 pip + venv 足够
  • 避免使用 Pipenv(维护缓慢、速度差)

Q3: pyproject.toml 是什么?

答案

PEP 518 定义的项目元数据文件,替代 setup.py/setup.cfg。所有现代工具(Poetry、uv、Ruff、pytest)都支持在 pyproject.toml 中配置。

相关链接