开发环境准备:操作系统、IDE、语言版本、依赖管理

做 SDK 接入改造,第一步就是搭环境。很多人觉得这事简单,装上 Python 就开干。嗯,我以前也这么想,结果被坑过好几次。环境不一致导致的问题,排查起来比写代码还痛苦。所以这一章,我把个人习惯的做法拆开来讲,你跟着走一遍,能少踩很多坑。

操作系统的选择

先说说操作系统。SDK 开发最怕“我机器上能跑,你那边就不行”。其实只要统一一个基线,问题就少一大半。

我个人偏好 Linux 或 macOS。为什么?因为终端生态和包管理更顺手。但 Windows 也不是不行,我见过不少团队用 WSL2 也跑得很稳。下面这张表,是我在实际项目中对比过的差异:

操作系统 优势 坑点 推荐场景
Linux (Ubuntu 20.04+) 原生 POSIX、Docker 兼容最好 桌面体验一般,驱动偶尔折腾 CI/CD、服务器、重度依赖 C 扩展
macOS (Ventura+) 终端友好、Xcode 工具链完整 文件路径大小写不敏感,偶有兼容差异 iOS SDK、前端 SDK、日常开发
Windows + WSL2 家里 Windows 游戏机也能开发 跨文件系统性能损失、网络代理麻烦 Windows 主力机,但想用 Linux 环境

我曾经在一个项目里,团队一半 macOS 一半 Windows。结果因为 os.path.join 和 shutil 的行为差异,浪费了两天联调。后来我们统一在 CI 里跑 Linux 容器,本地爱用啥用啥,但 上线环境强制对齐。这是个血泪教训。

小建议:哪怕你本地用 Windows,也建议装个 WSL2 的 Ubuntu,把 SDK 构建和测试都放在 Linux 容器里跑。这样能提前暴露环境差异。

IDE 与编辑器

编辑器这东西很个人。但做 SDK 接入改造,我建议选一个能同时支持 Python 和 JSON/YAML 语法的工具。毕竟我们经常要改配置文件、看日志、写测试。

我目前用得最多的是 VS Code。轻量、插件丰富,远程开发也方便。下面列出几个必装插件:

  • Python(微软官方)——代码补全、调试、Linting 一条龙
  • Pylance——类型检查,SDK 改造时特别有用,能帮你发现接口签名不匹配
  • YAML + JSON——高亮和校验,避免手抖写错配置
  • GitLens——看代码历史,方便追溯依赖改动的来源

如果你更喜欢 JetBrains 系,PyCharm Professional 也不错,尤其对大型项目重构支持好。但社区版就够了,别花冤枉钱。

这里有个经验:别在 IDE 里装太多“一键格式化”插件。我曾经被 autopep8 和 black 来回覆盖格式,导致代码提交全是格式噪音。团队里统一一个 formatter 就够了,我推荐 black + isort。

语言版本管理

SDK 接入改造通常要适配多个 Python 版本。你想想看,用户可能还在用 3.8,而你已经写了 3.11 的 match 语句。这兼容性怎么保证?

我的标配是 pyenv + virtualenv。pyenv 管 Python 版本,virtualenv 管项目隔离。具体操作:

# 安装 pyenv (macOS)
brew install pyenv

# 安装目标 Python 版本
pyenv install 3.8.18
pyenv install 3.10.13
pyenv install 3.11.7

# 在项目目录里设置局部版本
cd my_sdk_project
pyenv local 3.10.13

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

如果你团队用 conda,也完全可以。但我个人觉得 conda 太重,而且包解析有时慢得离谱。选一个工具坚持用就好,别混着来。

注意:不要在系统级 Python 里 pip install 包。我曾经手滑在系统 Python 装了新版 requests,然后 macOS 自带的软件包就崩了。项目虚拟环境隔离是底线。

依赖管理

依赖管理是 SDK 改造的“隐形杀手”。很多问题来自锁文件不匹配或传递依赖冲突。这里我给出一个经过验证的流程:

  1. 用 pip-tools 生成锁文件。只维护 requirements.in,然后编译出 requirements.txt。
  2. 锁定顶级依赖版本。比如 requests>=2.28,<3.0,别写 >=2.0 这种太宽的范围。
  3. 用 pip freeze 快照。上线前把虚拟环境里所有包版本记录到 requirements-lock.txt,确保可复现。

一个典型的 requirements.in 示例:

# SDK 核心依赖
requests>=2.28,<3.0
pydantic>=2.0,<3.0
cryptography>=41.0,<42.0

# 开发与测试
pytest>=7.4,<8.0
pytest-mock>=3.11,<4.0
black>=23.0,<24.0

编译命令:

pip-compile requirements.in -o requirements.txt

然后日常安装:

pip install -r requirements.txt

为什么要分两层?因为我以前直接写 requirements.txt,结果升级某个库时把锁文件改乱了,测试环境和生产环境差了三个版本。用 pip-compile 就能从源头上控制。

一站式环境检查流程

下面这张 SVG 把整个准备流程串起来了。你按这个顺序走,基本不会漏步骤。

开发环境准备流程 选择操作系统 安装IDE + 插件 配置语言版本 (pyenv) 依赖管理 (pip-tools) 验证环境 (跑通测试) 避坑提示 1. 不要用系统 Python 2. 锁文件必须版本控制 3. IDE 插件统一 4. 容器化后本地随便搞 示例软件版本:Ubuntu 20.04 · VS Code 1.85 · Python 3.10.13 · pip-tools 7.3

看到这张图你就明白了:从操作系统开始,一路往下选 IDE、配版本、管依赖,最后验证通过,环境才算准备好。

核心要点:
- 操作系统尽量统一到 Linux 容器,别在环境差异上浪费时间。
- 语言版本用 pyenv 管,项目虚拟环境隔离是底线。
- 依赖管理用 pip-tools 生成锁文件,锁定主版本范围。
- 每次改依赖后,记得重新编译并提交锁文件。

好,环境准备好了。接下来就是真正动手写 SDK 接入改造的代码了。