2. 环境搭建
在开始构建采购合同版本比对系统之前,必须搭建一套稳定、可复现的开发环境。本章将引导你完成从Python解释器安装到第三方库管理的完整流程,确保后续所有自动化脚本和差异检测算法都能在统一的环境中运行。
2.1 Python开发环境配置
推荐使用 Python 3.10+ 版本,该版本在类型提示、模式匹配和性能方面对文本处理任务有显著优化。以下为各主流操作系统的安装方式:
| 操作系统 | 安装方式 | 验证命令 |
|---|---|---|
| Windows | 从 python.org 下载安装包,勾选“Add Python to PATH” | python --version |
| macOS | 使用 Homebrew:brew install python@3.11 |
python3 --version |
| Linux (Ubuntu/Debian) | sudo apt install python3.11 python3.11-venv |
python3.11 --version |
提示:安装完成后,建议将 pip 升级到最新版本:
python -m pip install --upgrade pip。旧版 pip 在解析依赖时可能遗漏关键子依赖,导致后续库安装失败。
2.2 虚拟环境创建与依赖隔离
虚拟环境是Python项目隔离依赖的标准实践。每个采购合同比对项目都应拥有独立的虚拟环境,避免不同项目间的库版本冲突。
2.2.1 使用 venv 创建虚拟环境
# 在项目根目录下执行
python -m venv contract_diff_env
# 激活虚拟环境(Windows)
contract_diff_env\Scripts\activate
# 激活虚拟环境(macOS/Linux)
source contract_diff_env/bin/activate
# 激活后,终端提示符前会显示 (contract_diff_env)
2.2.2 依赖管理最佳实践
激活虚拟环境后,使用 pip freeze 生成依赖清单,确保团队成员或CI/CD环境能精确复现:
# 生成 requirements.txt
pip freeze > requirements.txt
# 从 requirements.txt 安装依赖
pip install -r requirements.txt
注意:不要将虚拟环境文件夹(如 contract_diff_env)提交到Git仓库。请在项目根目录创建
.gitignore 文件,并添加 contract_diff_env/ 条目。
2.3 Git版本控制基础
Git是合同版本比对项目的核心协作工具。我们不仅用它管理代码,还利用其diff机制作为后续自动化比对的原型参考。
2.3.1 初始化与基本工作流
# 初始化本地仓库
git init
# 配置用户信息(首次使用)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 标准工作流:工作区 → 暂存区 → 本地仓库
git add .
git commit -m "feat: 初始化项目结构与虚拟环境配置"
2.3.2 分支策略与合同版本管理
针对采购合同版本比对场景,推荐采用以下分支模型:
| 分支名称 | 用途 | 合并策略 |
|---|---|---|
main |
稳定发布版本,存放已通过比对的最终合同 | 仅从 develop 合并 |
develop |
日常开发集成,存放比对脚本的最新进展 | 功能分支合并至此 |
feature/contract-v1.2 |
针对特定合同版本的比对逻辑开发 | 完成后合并到 develop |
hotfix/diff-parser |
紧急修复差异解析器的bug | 直接合并到 main 和 develop |
2.4 所需第三方库安装
采购合同版本比对系统依赖以下核心库,覆盖文档解析、差异计算、报告生成三大模块:
| 库名 | 版本要求 | 用途 | 安装命令 |
|---|---|---|---|
| python-docx | >= 1.1.0 | 解析 .docx 格式的采购合同,提取段落、表格、样式 | pip install python-docx |
| difflib | 标准库 | Python内置差异比较引擎,用于行级和字符级比对 | 无需安装 |
| deepdiff | >= 6.0 | 递归比较嵌套数据结构(如合同条款字典),输出结构化差异 | pip install deepdiff |
| Jinja2 | >= 3.1 | 生成HTML/PDF格式的差异报告模板 | pip install Jinja2 |
| pandas | >= 2.0 | 处理合同条款表格数据,支持结构化比对 | pip install pandas |
| PyMuPDF (fitz) | >= 1.23 | 解析PDF格式的采购合同,提取文本和表格 | pip install PyMuPDF |
2.4.1 一键安装脚本
将以下内容保存为 requirements.txt,然后执行 pip install -r requirements.txt:
python-docx>=1.1.0
deepdiff>=6.0
Jinja2>=3.1
pandas>=2.0
PyMuPDF>=1.23
关键说明:
difflib 是Python标准库,无需额外安装。它提供 Differ、HtmlDiff 等类,是后续实现行级差异检测的基础工具。在采购合同比对中,我们优先使用 difflib.unified_diff 生成统一格式的差异上下文。
2.5 环境验证脚本
完成上述安装后,执行以下Python脚本验证所有组件是否就绪:
# verify_env.py
import sys
import difflib
import docx
import deepdiff
import jinja2
import pandas as pd
import fitz # PyMuPDF
print("✅ Python 版本:", sys.version)
print("✅ difflib: 标准库已就绪")
print("✅ python-docx:", docx.__version__)
print("✅ deepdiff:", deepdiff.__version__)
print("✅ Jinja2:", jinja2.__version__)
print("✅ pandas:", pd.__version__)
print("✅ PyMuPDF:", fitz.version)
print("\n🎉 环境搭建完成,所有依赖库加载成功!")
最佳实践:将上述验证脚本保存在项目根目录的
scripts/ 文件夹中。每次在新机器上克隆项目后,首先运行该脚本,确保环境一致性。如果某个库加载失败,请检查虚拟环境是否激活,或尝试重新安装该库。