2. 环境搭建:Python虚拟环境创建、依赖管理(pip/poetry)、项目目录结构设计、版本控制(Git)初始化
本章将搭建可解释AI评分接口的完整开发环境。一个干净、可复现的环境是后续开发与部署的基础,避免“在我电脑上能跑”的尴尬。我们将依次完成:虚拟环境创建、依赖管理工具选择、项目目录结构设计、Git版本控制初始化。
2.1 Python虚拟环境创建
虚拟环境为每个项目提供独立的Python解释器和包依赖空间,防止不同项目间的包版本冲突。Python 3.3+ 内置 venv 模块,无需额外安装。
2.1.1 使用 venv 创建虚拟环境
# 在项目根目录下执行
python -m venv .venv
# 激活虚拟环境(Windows)
.venv\Scripts\activate
# 激活虚拟环境(macOS/Linux)
source .venv/bin/activate
# 验证是否激活成功
which python # macOS/Linux
where python # Windows
# 输出应指向 .venv 目录下的解释器路径
💡 命名规范: 推荐将虚拟环境目录命名为
.venv(带点号),Git 默认忽略点开头的目录,避免误提交。同时 .venv 是社区广泛接受的约定名称。
2.1.2 虚拟环境 vs Conda 环境
| 特性 | venv | Conda |
|---|---|---|
| 适用范围 | 仅 Python 包 | Python + 非 Python 依赖(如 C 库) |
| 性能 | 轻量,创建快 | 较重,环境解析慢 |
| 跨平台 | 原生支持 | 需安装 Anaconda/Miniconda |
| 推荐场景 | 纯 Python 项目、API 服务 | 数据科学、机器学习(含 CUDA 等) |
本课程为纯 Python API 项目,选择 venv 即可满足需求。
2.2 依赖管理:pip 与 Poetry
依赖管理解决“项目需要哪些包、什么版本、如何锁定”的问题。我们对比两种主流方案:传统 pip + requirements.txt 与现代 Poetry。
2.2.1 pip + requirements.txt(传统方案)
# 生成当前环境的依赖列表
pip freeze > requirements.txt
# 从 requirements.txt 安装依赖
pip install -r requirements.txt
# requirements.txt 示例内容
fastapi==0.104.1
uvicorn[standard]==0.24.0
pydantic==2.5.2
scikit-learn==1.3.2
shap==0.44.0
pandas==2.1.4
numpy==1.26.2
⚠️ pip freeze 的陷阱:
pip freeze 会输出当前环境中所有已安装的包(包括依赖的依赖),导致 requirements.txt 臃肿且难以维护。推荐使用 pip list --format=freeze 或手动整理仅包含直接依赖。
2.2.2 Poetry(现代方案)
Poetry 提供统一的依赖声明、锁定、打包和发布功能,使用 pyproject.toml 替代 requirements.txt。
# 安装 Poetry(推荐使用官方安装脚本)
curl -sSL https://install.python-poetry.org | python3 -
# 验证安装
poetry --version
# 在项目目录初始化 Poetry
poetry init
# 添加依赖(自动更新 pyproject.toml 和 poetry.lock)
poetry add fastapi uvicorn pydantic scikit-learn shap pandas numpy
# 安装所有依赖
poetry install
# 激活 Poetry 虚拟环境
poetry shell
2.2.3 两种方案对比
| 维度 | pip + requirements.txt | Poetry |
|---|---|---|
| 依赖声明文件 | requirements.txt(纯文本) | pyproject.toml(结构化 TOML) |
| 锁定文件 | 无(需手动管理版本) | poetry.lock(自动生成,保证可复现) |
| 依赖分组 | 需多个 requirements 文件 | 原生支持 dev/test 分组 |
| 依赖解析 | 线性安装,可能冲突 | SAT 求解器,自动解决冲突 |
| 学习曲线 | 低 | 中 |
本课程采用 Poetry 作为依赖管理工具,因其锁定机制能确保开发、测试、生产环境依赖完全一致。
2.3 项目目录结构设计
良好的目录结构提升代码可维护性和团队协作效率。以下是本课程推荐的结构:
explainable-ai-score-api/
├── .venv/ # 虚拟环境(Git 忽略)
├── app/ # 应用主代码
│ ├── __init__.py
│ ├── main.py # FastAPI 应用入口
│ ├── api/ # API 路由层
│ │ ├── __init__.py
│ │ └── v1/ # API 版本 v1
│ │ ├── __init__.py
│ │ └── endpoints.py # 评分接口端点
│ ├── core/ # 核心业务逻辑
│ │ ├── __init__.py
│ │ ├── model.py # 模型加载与预测
│ │ └── explainer.py # SHAP 解释器封装
│ ├── schemas/ # Pydantic 数据模型
│ │ ├── __init__.py
│ │ └── request_response.py
│ └── utils/ # 工具函数
│ ├── __init__.py
│ └── logger.py
├── tests/ # 测试代码
│ ├── __init__.py
│ ├── test_api.py
│ └── test_model.py
├── models/ # 训练好的模型文件
│ └── credit_model.pkl
├── notebooks/ # Jupyter 探索笔记
├── .gitignore # Git 忽略规则
├── pyproject.toml # Poetry 项目配置
├── poetry.lock # 依赖锁定文件
├── README.md # 项目说明文档
└── Dockerfile # 容器化部署配置
📐 设计原则:
- 分层清晰: API 路由、业务逻辑、数据模型、工具函数各司其职。
- 版本预留:
api/v1/目录为未来 API 版本升级预留空间。 - 关注点分离: 模型文件与代码分离,便于替换和版本管理。
2.4 版本控制(Git)初始化
Git 是项目协作和版本回溯的基石。初始化步骤包括:创建仓库、配置忽略规则、首次提交。
2.4.1 初始化 Git 仓库
# 在项目根目录执行
git init
# 配置用户信息(首次使用 Git 时)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 查看当前状态
git status
2.4.2 编写 .gitignore 文件
.gitignore 告诉 Git 哪些文件不需要纳入版本控制。以下是本项目的推荐配置:
# Python 虚拟环境
.venv/
venv/
env/
# Python 缓存
__pycache__/
*.py[cod]
*.so
# IDE 配置
.vscode/
.idea/
*.swp
*.swo
# 模型文件(体积大,不纳入版本控制)
models/*.pkl
models/*.h5
# 数据集
data/*.csv
data/*.xlsx
# Jupyter 检查点
.ipynb_checkpoints/
# 日志文件
*.log
# 操作系统文件
.DS_Store
Thumbs.db
# Poetry 虚拟环境目录(如果 Poetry 创建在项目内)
.poetry/
2.4.3 首次提交
# 添加所有文件到暂存区
git add .
# 查看即将提交的文件列表
git status
# 创建首次提交
git commit -m "chore: 初始化项目结构,配置 Poetry 和 Git"
# 关联远程仓库(以 GitHub 为例)
git remote add origin https://github.com/your-username/explainable-ai-score-api.git
# 推送到远程仓库
git push -u origin main
🔑 提交信息规范: 推荐使用 Conventional Commits 规范,如
feat:(新功能)、fix:(修复)、chore:(杂项)、docs:(文档)。这便于自动生成 changelog 和语义化版本管理。
2.5 环境验证
完成上述步骤后,执行以下命令验证环境是否就绪:
# 1. 确认虚拟环境激活
which python
# 输出应包含 .venv
# 2. 确认 Poetry 安装
poetry --version
# 输出类似 Poetry (version 1.7.1)
# 3. 确认依赖安装
poetry show --tree
# 应列出所有已安装的依赖及其依赖树
# 4. 确认 Git 状态
git log --oneline
# 应显示首次提交记录
# 5. 确认项目结构
ls -la
# 应包含 app/ tests/ models/ pyproject.toml .gitignore 等
✅ 环境搭建完成标志:
- 虚拟环境
.venv已创建并激活 - Poetry 已安装,
pyproject.toml和poetry.lock已生成 - 项目目录结构完整,各模块占位文件已创建
- Git 仓库已初始化,首次提交已完成