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 版本升级预留空间。
  • 关注点分离: 模型文件与代码分离,便于替换和版本管理。
项目目录结构图 explainable-ai-score-api/ app/ (主代码) tests/ (测试) models/ (模型) 配置文件 main.py api/v1/ core/ schemas/ utils/ pyproject.toml poetry.lock .gitignore Dockerfile README.md 📌 目录设计要点 • app/ 内按功能分层:api、core、schemas、utils • 模型文件与代码分离,便于版本管理和替换

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 仓库已初始化,首次提交已完成