4. 开发环境搭建:IDE配置、版本控制、依赖管理与虚拟环境

说实话,开发环境这个事儿,很多人一开始不重视。我见过太多项目,代码写得挺好,结果环境搭了一周还没跑起来。这一章,咱们就把IDE、Git、依赖管理和虚拟环境一次性理清楚。

核心目标:搭建一套可复现、可迁移、可协作的开发环境。说白了,就是让新人 clone 代码后,十分钟内能跑起来。

4.1 IDE 配置:你的主战场

我个人习惯用 VS Code,偶尔切到 PyCharm 处理大型 Django 项目。这里不讲门派之争,只说实用配置。

4.1.1 必须装的插件

  • Python(微软官方):语法高亮、IntelliSense、调试器
  • GitLens:行内显示 blame 信息,谁改的、为什么改一目了然
  • EditorConfig for VS Code:多语言缩进对齐,团队统一
  • Prettier:前端代码格式化,后端也能用
  • Docker:如果你的项目用容器,这个必备

我曾经犯过一个低级错误:项目里有三个开发者,缩进分别是2空格、4空格和Tab。Git diff 里全是空格变更。后来强制用了 .editorconfig,再也没吵过架。

4.1.2 工作区配置

{
    "editor.formatOnSave": true,
    "python.linting.enabled": true,
    "python.linting.flake8Enabled": true,
    "python.formatting.provider": "black",
    "git.enableSmartCommit": true,
    "files.exclude": {
        "**/__pycache__": true,
        "**/.pytest_cache": true,
        "**/.venv": true
    }
}

把这个放到项目根目录的 .vscode/settings.json 里,团队每个人都会自动应用。嗯,这里要注意:.venv 排除掉,谁也不想在文件树上看到几百个依赖包。

4.2 版本控制(Git):别把仓库搞崩溃

Git 我用了十几年,踩过的坑能写本书。你想想看,团队里只要一个人把大文件 push 到仓库,整个历史就炸了。

4.2.1 分支策略

小团队用 GitHub Flow 就够了:main 分支保护,功能从 feature 分支合并。大项目推荐 Git Flow,但别搞得太复杂。

层级用途合并权限
main生产就绪代码仅管理员 + CI 通过
develop下个版本的集成分支开发人员 + Code Review
feature/*新功能开发开发者自建,自动删除
hotfix/*紧急修复从 main 切出,修复后合并回 main 和 develop

4.2.2 .gitignore 必须尽早写好

# Python
__pycache__/
*.py[cod]
*.egg-info/
dist/
build/

# 虚拟环境
.venv/
venv/

# IDE
.vscode/
.idea/

# 环境变量
.env
*.env.local

# 大文件
*.zip
*.tar.gz

# 系统
.DS_Store
Thumbs.db

警告:不要在第一次 commit 之后才加 .gitignore,否则已跟踪的文件需要用 git rm --cached 清理,历史记录里会残留。我曾经因此把 .env 文件里的数据库密码暴露在公开仓库里……当天晚上就收到 AWS 的账单警报。

4.2.3 常用命令清单

  • git stash push -m "暂存未完成的工作" —— 临时切分支时用
  • git rebase -i HEAD~3 —— 整理最近3个 commit,保持历史干净
  • git log --oneline --graph --all —— 看分支关系图
  • git tag v1.2.3 —— 打版本标签,CI/CD 自动部署常用

4.3 依赖管理:别让“在我电脑上能跑”成为团队口头禅

依赖管理就两个原则:锁定版本 + 区分环境。Node 项目用 package-lock.json,Python 项目用 pip freeze > requirements.txt。但更推荐 pipenv 或 poetry。

4.3.1 对比主流工具

工具锁定文件虚拟环境适合
pip + requirements.txt手动 freeze手动简单脚本
pipenvPipfile.lock自动中等项目
poetrypoetry.lock自动库 / 复杂项目
yarnyarn.locknode_modules前端

我个人推荐 Poetry。原因?它解决了 Pipfile 里一些奇怪的哈希校验问题。我遇到过生产环境依赖版本跑偏,因为有人手动改了 Pipfile 里的版本号,但没更新 lock 文件——用 Poetry 就不会,它的 lock 文件是算法校验的。

4.3.2 一个典型的 Python 依赖文件

[tool.poetry.dependencies]
python = "^3.10"
django = "4.2.7"
djangorestframework = "3.14.0"
celery = "^5.3"

[tool.poetry.group.dev.dependencies]
pytest = "^7.4"
black = "^23.12"
flake8 = "^6.1"

注意:生产依赖和开发依赖分开。部署时用 poetry install --only main,测试工具就不装到服务器上了。

关键点:永远把 poetry.lock 或 package-lock.json 提交到版本控制。这样所有人在同一时刻拉到的依赖版本完全一致。

4.4 虚拟环境:隔离,隔离,还是隔离

你想想看,系统里有 Python 3.11,但项目 A 只能用 3.9 因为某个库不兼容。没有虚拟环境,你就等着哭吧。

虚拟环境本质上只是一个独立的 Python 解释器和包目录。我常用的方式:

  • conda:适合数据科学项目,包多且环境复杂
  • Python venv (内置):轻量,适合纯 Python 项目
  • poetry shell:自动创建并激活虚拟环境
  • Docker:终极隔离方案,但太重了,开发阶段可以不用

4.4.1 快速创建虚拟环境

# 使用内置 venv
python -m venv .venv
source .venv/bin/activate

# 或者用 Poetry 自动创建
poetry install
poetry shell

注意:不要把这个 .venv 文件夹提交到 Git!在 .gitignore 里写明排除它。我见过一些人把整个 .venv 传到仓库,不仅占几百兆空间,而且其他操作系统根本跑不了。

4.5 从零搭建的完整流程(一个迷你案例)

假设我们要做一个 To-do List API,名字叫 todo-api。我会这样走一遍:

  1. mkdir todo-api && cd todo-api
  2. git init 并写好 .gitignore
  3. 用 Poetry 初始化:poetry new . 或 poetry init
  4. poetry add django djangorestframework
  5. poetry add --dev pytest black flake8
  6. poetry install 生成 poetry.lock
  7. 用 Django 创建项目骨架
  8. 在 VS Code 中打开,自动激活 Poetry 虚拟环境(插件会自动识别)
  9. 第一次 commit:git add . && git commit -m "feat: initial project setup with Django + DRF"
  10. 推送远程仓库,CI/CD 开始跑测试

这一步走完,不管是实习生还是资深工程师,clone 之后执行 poetry install + python manage.py runserver 就能开工。

开发环境搭建流程 开发环境搭建流程 项目初始化 IDE 配置与插件 Git 仓库 + .gitignore Poetry 依赖管理 虚拟环境(.venv) 先做这一步 否则后续所有操作无依赖 编辑器配置跟团队统一 避免空格/tab混用 .gitignore 先写 禁止 .env / .venv / __pycache__ 锁定版本号 lock 文件必须提交 隔离环境 不污染系统 Python ① ② ③ ④ ⑤

这五步做下来,你的项目环境就具备“开箱即用”的能力了。不管换电脑、加新同事,都只需要 git clone && poetry install 两个命令。