4. 开发环境搭建:Python版本管理、虚拟环境、pip安装、IDE推荐

好,开始动手搭环境了。说实话,很多人刚开始搞Python最头疼的就是版本冲突、包乱装。我早期做SDK测试时就踩过这个坑——本地跑得好好的,CI上一跑全挂。后来才明白,环境治理是SDK自动化测试的第一道防线。

核心原则: 一套测试环境 = 一个独立的Python版本 + 一个干净的虚拟环境 + 一套精准的依赖。

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
我的习惯: 每一个SDK项目根目录都放一个 .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!我曾经手滑 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
避坑指南: 如果SDK本身也通过pip安装(很多SDK会发布到内部PyPI),记得在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"
}
小结一下: 我的建议是——PC内存够用选PyCharm,需要轻量跨平台选VSCode。两个都能配合虚拟环境和pyenv,只要你把Python路径指向你的虚拟环境,IDE就能识别所有已安装的包。

4.5 本章核心流程图

下面是开发环境搭建的整体流程。你可能不会每次从头搭,但理清这个顺序,能帮你少走很多弯路。

SDK自动化测试开发环境搭建流程 pyenv / Miniconda venv / virtualenvwrapper pip / uv + requirements.txt PyCharm / VSCode pytest / 自动化测试用例执行 关键检查点 ✓ Python版本 >= 3.8 ✓ 虚拟环境已激活 ✓ pip已升级到最新 ✓ 依赖无冲突 常见问题 • pip安装超时 → 换国内镜像 • 版本冲突 → 用pip check • 权限错误 → 不要用sudo • IDE不识别环境 → 配interpreter
一点建议: 花15分钟把工具链配好,后面省的是几小时。我之前带新同学,第一件事就是让他配好pyenv + virtualenvwrapper + VSCode。第二天再教他跑测试,基本没有环境问题。