4. 开发环境搭建:Python版本管理、虚拟环境、pip安装、IDE推荐
好,开始动手搭环境了。说实话,很多人刚开始搞Python最头疼的就是版本冲突、包乱装。我早期做SDK测试时就踩过这个坑——本地跑得好好的,CI上一跑全挂。后来才明白,环境治理是SDK自动化测试的第一道防线。
4.1 Python版本管理
为什么专门提版本管理?你想想看,SDK要兼容的Python版本可能从3.6一直到3.12。你本地用3.10,但客户的CI是3.8,很多语法糖直接炸。所以你不能只装一个Python,得能随时切换。
我个人习惯用pyenv。它不侵入系统Python,所有的版本装在 ~/.pyenv/versions/ 里。用起来很简单:
# 安装pyenv(macOS/Linux)
curl https://pyenv.run | bash
# 列出可安装的版本
pyenv install --list | grep 3.1
# 安装3.8.18和3.11.6
pyenv install 3.8.18
pyenv install 3.11.6
# 全局默认用3.11
pyenv global 3.11.6
# 临时切换某个目录用3.8
cd /project/sdk_test_v2
pyenv local 3.8.18
.python-version 文件。pyenv会自动读取它。这样团队其他人 clone 项目后,直接 pyenv install 就能对齐版本,不会有人用3.7写walrus operator然后CI挂掉。
要是你在Windows上怎么办?我建议直接用 Miniconda。conda本身带版本管理,而且对Windows的path处理比pyenv稳定。我在项目里遇到过用pyenv-win反复切版本后终端不生效的情况,换成conda后就再也没出过问题。
4.2 虚拟环境
版本管了,接下来是隔离。我曾经在一个项目里同时测三套SDK,A要requests 2.25,B要2.31,C要2.18。如果不做隔离,pip一装就打架。虚拟环境就是干这个的。
Python官方从3.3起内置了 venv。它轻量、无依赖,够用。我常用的两种方案:
| 方案 | 命令 | 适用场景 |
|---|---|---|
| venv(内置) | python -m venv .venv |
单人项目、快速原型 |
| virtualenv + virtualenvwrapper | mkvirtualenv sdk_test |
多项目频繁切换 |
| pipenv | pipenv install |
需要Pipfile.lock锁定版本 |
我个人更偏爱 virtualenvwrapper。它的 workon 命令一键跳环境,极省心。
# 安装
pip install virtualenvwrapper
# 配置(加到 ~/.zshrc 或 ~/.bashrc)
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
# 创建并激活
mkvirtualenv sdk_test -p python3.8
# 现在你已经在sdk_test环境里了
# 临时退出去做别的事
deactivate
# 再回来
workon sdk_test
sudo pip install pytest,结果pytest被装到了系统Python里,虚拟环境怎么import都是旧版。查了半小时才发现是sudo绕过环境变量的问题。
还有一点——记得把虚拟环境目录加到 .gitignore。把 .venv/ 或 .virtualenvs/ 提交上去,不仅浪费空间,还容易把跨平台的差异带到CI里。
4.3 pip安装
pip是Python的包管理器。嗯,对大多数人来说够用了。但有几个细节要注意。
版本升级: 新装的Python自带的pip可能比较老。我习惯一建好环境就先升级:
python -m pip install --upgrade pip
为什么?因为旧版pip解析依赖的能力弱,遇到深度依赖树可能装错版本。我遇到过pytest 6.0在旧pip下装了iniconfig 1.0,结果conftest里读取配置直接报错。升级到pip 23后自动选了iniconfig 2.0,问题消失。
依赖锁定: 自动化测试对版本一致性要求极高。你用 pip freeze 冻结环境:
pip freeze > requirements.txt
# 或者更严谨的,只保留顶层依赖
pip list --format=freeze > requirements.txt
团队其他人拿到 requirements.txt 后,一条命令就能复刻环境:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
our_sdk==2.5.1。我曾经没写版本,CI拉到了最新版,结果新SDK改了API签名,测试用例全崩。
还有一个新工具推荐——uv。Rust写的,安装速度是pip的10倍以上,而且依赖解析更严格。我用它来给大型SDK测试套件装依赖,时间从40秒降到4秒。体验很爽。
pip install uv
uv pip install -r requirements.txt
当然,CI上为了兼容性,你可能还是得用pip。但你本地用uv加速开发,没人会说你。
4.4 IDE推荐
IDE这事很个人。我提供两个主流选择,你可以看自己的习惯来。
PyCharm
如果你做SDK测试,PyCharm Professional的 单元测试集成 非常强。右键直接跑pytest,覆盖率、断点、测试树视图一条龙。我用它最大的感受是——调试SDK私有协议时,直接在IDE里打断点,边测边看变量,效率比打log快很多。
但PyCharm比较重。尤其你电脑内存只有16G,再开一个SDK仿真器,很可能卡到鼠标都出不来。嗯,这个要注意。
VSCode
轻量、扩展生态好。我目前在团队里推荐的是 VSCode 搭配这几个扩展:
- Python(微软官方)—— 提供IntelliSense、调试、测试发现
- Pylance —— 类型检查,对SDK的复杂类型提示很有帮助
- Python Test Explorer for VSCode —— 让测试用例显示在侧边栏,点一下就能跑
- GitLens —— 看代码谁写的,方便定位问题
我自己的配置经验是,在 .vscode/settings.json 里把测试框架指定为pytest,并自动发现测试:
{
"python.testing.pytestEnabled": true,
"python.testing.autoTestDiscoverOnSaveEnabled": true,
"python.testing.pytestArgs": [
"--rootdir=${workspaceFolder}/tests"
],
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python"
}
4.5 本章核心流程图
下面是开发环境搭建的整体流程。你可能不会每次从头搭,但理清这个顺序,能帮你少走很多弯路。