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 | 手动 | 简单脚本 |
| pipenv | Pipfile.lock | 自动 | 中等项目 |
| poetry | poetry.lock | 自动 | 库 / 复杂项目 |
| yarn | yarn.lock | node_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。我会这样走一遍:
mkdir todo-api && cd todo-apigit init并写好.gitignore- 用 Poetry 初始化:
poetry new .或poetry init poetry add django djangorestframeworkpoetry add --dev pytest black flake8poetry install生成poetry.lock- 用 Django 创建项目骨架
- 在 VS Code 中打开,自动激活 Poetry 虚拟环境(插件会自动识别)
- 第一次 commit:
git add . && git commit -m "feat: initial project setup with Django + DRF" - 推送远程仓库,CI/CD 开始跑测试
这一步走完,不管是实习生还是资深工程师,clone 之后执行 poetry install + python manage.py runserver 就能开工。
这五步做下来,你的项目环境就具备“开箱即用”的能力了。不管换电脑、加新同事,都只需要 git clone && poetry install 两个命令。