2. 环境准备与工具链:Python环境配置、虚拟环境管理、版本控制与依赖管理

说实话,很多同学写升级脚本翻车,不是逻辑写错了,而是环境没搭对。我见过太多人直接在系统 Python 里 pip install,结果某天升级一个包,把系统工具搞崩了。嗯,咱们先把地基打牢。

2.1 Python 环境配置

我个人习惯用 Python 3.8+ 来写升级脚本。为什么?因为 3.6 以下已经停止安全更新了,而 3.11+ 有些第三方库还没跟上。

Python 版本 推荐场景 我的建议
3.8 生产环境兼容性优先 最稳,大部分旧系统都支持
3.10 新项目开发 语法特性够用,性能也不错
3.11+ 尝鲜或特定需求 注意检查依赖库是否已适配
小技巧: 用 python --version 和 pip --version 确认当前环境。如果系统里装了多个 Python 版本,可以用 python3.8、python3.10 这样指定。

2.2 虚拟环境管理

为什么要用虚拟环境?说白了,就是给每个项目一个独立的 Python 小房间。你在房间里随便折腾,不会影响到外面的系统。

2.2.1 venv(Python 内置)

Python 3.3 以后自带的,不用额外安装。我个人最常用它,轻量、简单。

# 创建虚拟环境
python -m venv upgrade_env

# 激活(Linux/Mac)
source upgrade_env/bin/activate

# 激活(Windows)
upgrade_env\Scripts\activate

# 退出
deactivate
注意: 激活后,命令行前面会出现 (upgrade_env) 提示。如果没看到,说明没激活成功。我曾经在这上面浪费过半小时,后来发现是 PowerShell 执行策略限制了脚本运行。

2.2.2 pipenv(更高级的封装)

pipenv 把 pip 和虚拟环境管理合二为一,还自动生成 Pipfile 和 Pipfile.lock。适合需要精确锁定依赖版本的项目。

# 安装 pipenv
pip install pipenv

# 创建虚拟环境并安装依赖
pipenv install requests

# 激活虚拟环境
pipenv shell

# 生成 requirements.txt
pipenv lock -r > requirements.txt

我遇到过一种情况:团队里有人用 venv,有人用 pipenv,结果 requirements.txt 格式不统一,CI 构建老报错。后来我们统一用 venv + requirements.txt,简单粗暴,反而少了很多麻烦。

2.3 版本控制工具(Git)

升级脚本不放在 Git 里?那你胆子真大。我见过有人直接在服务器上改脚本,改完忘了备份,回滚的时候欲哭无泪。

2.3.1 基本配置

# 设置用户信息
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 初始化仓库
git init

# 添加文件并提交
git add upgrade_script.py
git commit -m "feat: 初始版本升级脚本"

2.3.2 分支策略

我个人习惯这样管理升级脚本:

  • main:稳定版本,只合入经过测试的代码
  • develop:开发中的脚本
  • feature/xxx:某个特定升级功能的开发分支
  • hotfix/xxx:紧急修复分支

核心原则: 永远不要在 main 分支上直接改代码。每次升级前,从 main 拉一个新分支,测试通过后再合并回去。

2.4 依赖管理(requirements.txt)

这个文件就是你的脚本的「购物清单」。别人拿到它,一条命令就能装好所有依赖。

2.4.1 标准格式

# requirements.txt
paramiko==2.12.0
requests==2.31.0
pyyaml==6.0.1
# 不指定版本,默认装最新
jsonschema

2.4.2 生成与安装

# 生成当前环境的依赖列表
pip freeze > requirements.txt

# 从文件安装依赖
pip install -r requirements.txt
避坑指南: 我曾经直接用 pip freeze > requirements.txt 把整个系统的依赖都导出来了,结果别人装的时候装了一堆没用的包。正确做法是:先在虚拟环境里只装你需要的包,再 freeze。

2.4.3 依赖版本锁定策略

策略 写法 适用场景
精确锁定 paramiko==2.12.0 生产环境,确保一致性
大版本锁定 paramiko>=2.12, <3.0 开发环境,允许小版本更新
不锁定 paramiko 快速原型,不推荐用于生产

2.5 知识体系总览

下面这张图把本章的核心脉络串起来了。你跟着它走一遍,心里就有底了。

环境准备与工具链知识体系 环境准备与工具链知识体系 升级脚本开发环境 Python 环境配置 虚拟环境管理 版本控制 (Git) 依赖管理 版本选择 多版本共存 venv pipenv 分支策略 提交规范 requirements 版本锁定 核心原则:隔离 + 可复现 + 可追溯 每个升级脚本都应该有独立的虚拟环境和版本记录

2.6 实战:搭建一个完整的升级脚本项目

咱们把上面这些知识点串起来,走一遍完整的流程。

# 1. 创建项目目录
mkdir db_upgrade_project
cd db_upgrade_project

# 2. 初始化 Git
git init

# 3. 创建虚拟环境
python -m venv venv
source venv/bin/activate

# 4. 安装依赖
pip install paramiko pyyaml

# 5. 生成依赖文件
pip freeze > requirements.txt

# 6. 创建 .gitignore(忽略虚拟环境目录)
echo "venv/" >> .gitignore
echo "__pycache__/" >> .gitignore

# 7. 第一次提交
git add .
git commit -m "chore: 初始化升级脚本项目"

记住: 每次修改依赖后,都要重新 freeze 并提交 requirements.txt。这样别人 clone 项目后,一条 pip install -r requirements.txt 就能还原你的环境。