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
Git分支策略与合同版本管理流程 main develop feature/contract-v1.2 hotfix/diff-parser 合并方向 feature → develop → main

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 生成统一格式的差异上下文。
第三方库依赖架构与数据流 输入:采购合同 (.docx / .pdf) 文档解析 python-docx / PyMuPDF 差异比对引擎 difflib + deepdiff 结构化处理 pandas (条款表格) 报告生成 Jinja2 (HTML/PDF)

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/ 文件夹中。每次在新机器上克隆项目后,首先运行该脚本,确保环境一致性。如果某个库加载失败,请检查虚拟环境是否激活,或尝试重新安装该库。