Skip to content

Python 环境与依赖管理

本文合并讲解 Python 的包管理(pip)与虚拟环境(venv / pip-tools / poetry / conda),帮助你隔离依赖、可复现地构建项目。

作者:yanshaodong

为什么需要隔离

不同项目可能依赖同一库的不同版本。全局安装会造成版本冲突,虚拟环境为每个项目提供独立的 site-packages,互不干扰。

pip 基础

pip 是 Python 的包管理器(Python 3.4+ 默认内置,安装时勾选 "Add Python to PATH")。

bash
# 安装 / 升级 / 卸载
pip install requests
pip install --upgrade requests
pip uninstall requests

# 查看已安装包
pip list

注:pip search 因 PyPI API 调整多数版本已不可用,建议直接访问 https://pypi.org/ 搜索。

多版本 Python 用户可用 pyenv(跨平台)或 Anaconda(数据科学)切换。

标准库 venv

Python 3.3+ 内置,无需额外安装:

bash
# 创建环境
python -m venv .venv

# 激活(Windows)
.venv\Scripts\activate
# 激活(macOS / Linux)
source .venv/bin/activate

# 停用
deactivate

激活后,python / pip 指向环境内解释器。建议把 .venv/ 加入 .gitignore

依赖记录

bash
pip install requests fastapi
pip freeze > requirements.txt     # 导出全部传递依赖
pip install -r requirements.txt   # 他人安装

pip freeze 锁定完整依赖树便于复现,但不区分直接/间接依赖。

pip-tools(可复现 + 分层)

bash
pip install pip-tools

requirements.in(仅写直接依赖):

requests
fastapi

编译为带哈希的锁定文件:

bash
pip-compile requirements.in   # 生成 requirements.txt(含哈希)
pip-sync requirements.txt     # 精确同步环境

Poetry(现代化一体化)

poetry 同时管理依赖、虚拟环境与打包:

bash
pip install poetry
poetry init
poetry add fastapi
poetry add --group dev pytest
poetry install          # 安装全部依赖(自动建环境)
poetry run python app.py
poetry shell

pyproject.toml 示例:

toml
[tool.poetry]
name = "my-app"
version = "0.1.0"
description = ""
authors = ["yanshaodong"]

[tool.poetry.dependencies]
python = "^3.10"
fastapi = "^0.110.0"

[tool.poetry.group.dev.dependencies]
pytest = "^8.0.0"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

poetry.lock 提供精确锁定,适合团队与发布。

Conda(数据科学场景)

适合需要非 Python 依赖(如 CUDA、R)的场景:

bash
conda create -n myenv python=3.10
conda activate myenv
conda install numpy pandas

conda 包更全但对纯 Python 项目偏重,建议数据科学 / AI 场景使用。

选型建议

场景推荐
简单脚本 / 学习venv + requirements.txt
需要可复现构建pip-tools
应用开发 / 发布poetry
数据科学 / AI(含系统依赖)conda / mamba

小结

  • 永远不要污染全局环境,每个项目独立环境。
  • pip 负责装包,venv / poetry 负责隔离与锁定。
  • 锁定文件(requirements.txt / poetry.lock)应提交到版本库。
  • 数据科学多系统依赖场景优先 conda