第10章:开发环境搭建——Python虚拟环境配置、Node.js环境安装、Git版本控制、Docker容器化开发环境

说实话,很多初学者一上来就急着写代码,结果环境配了三天还没跑通第一个程序。我见过太多这样的案例了。环境搭建这事儿,看着琐碎,但它是你后续所有工作的地基。地基不稳,楼盖得再高也得塌。

这一章,咱们就把Python虚拟环境、Node.js、Git和Docker这四个核心工具一次性搞定。我会把我在项目中踩过的坑、总结的经验都抖出来,你跟着一步步来就行。

10.1 Python虚拟环境:为什么你必须用它?

先问个问题:你电脑上是不是装了好几个Python项目?有的用Django 2.0,有的用Flask 2.0,还有的用TensorFlow 1.x?如果你把所有依赖都装到全局环境里,那简直就是一场灾难。

虚拟环境的核心作用就是隔离。每个项目有自己的依赖包,互不干扰。我刚开始做AI编程助手项目时,就因为全局环境里装了两个版本的requests库,调试了整整一个下午才发现问题。嗯,从那以后,我每个项目必建虚拟环境。

10.1.1 使用venv创建虚拟环境

Python 3.3以上版本自带venv模块,不需要额外安装。我个人习惯用这个,轻量、干净。

# 创建虚拟环境
python -m venv myenv

# 激活虚拟环境(Windows)
myenv\Scripts\activate

# 激活虚拟环境(macOS/Linux)
source myenv/bin/activate

# 退出虚拟环境
deactivate

激活后,你会看到命令行前面多了个 (myenv) 前缀,这就说明你已经在虚拟环境里了。这时候你安装的所有包,都只在这个环境里生效。

我的小技巧: 我习惯把虚拟环境建在项目根目录下,命名为 .venv。这样既隐蔽又统一,而且很多IDE会自动识别它。

10.1.2 使用pip管理依赖

有了虚拟环境,接下来就是管理依赖了。记住两个核心命令:

# 安装依赖
pip install requests==2.28.1

# 导出依赖清单
pip freeze > requirements.txt

# 从清单安装依赖
pip install -r requirements.txt

为什么要用requirements.txt? 你想想看,如果你把项目分享给同事,或者部署到服务器上,总不能让人家一个个手动装吧?有了这个文件,一行命令就搞定了。

注意: 我曾经犯过一个低级错误——在全局环境里执行了 pip freeze,结果导出了几百个包,把项目搞得乱七八糟。记住,一定要在虚拟环境激活状态下操作。

10.2 Node.js环境安装:前端开发的基础设施

AI编程助手的前端部分,或者某些工具链,都离不开Node.js。说白了,它就是JavaScript的运行环境,让你能在服务器端跑JS代码。

10.2.1 安装Node.js和npm

我建议你直接去官网下载LTS版本。别追新,稳定才是王道。我在项目中遇到过因为用了最新版导致某些包不兼容的情况,折腾了半天。

版本类型 适用场景 我的建议
LTS(长期支持) 生产环境、正式项目 首选,稳定可靠
Current(最新版) 尝鲜、测试新特性 不推荐用于正式项目

安装完成后,验证一下:

node --version
npm --version

看到版本号就说明装好了。npm是Node.js自带的包管理器,类似于Python的pip。

10.2.2 使用nvm管理多版本Node.js

如果你同时维护多个项目,每个项目要求的Node.js版本可能不一样。这时候nvm就派上用场了。

# 安装nvm(macOS/Linux)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

# 安装指定版本
nvm install 16.20.0

# 切换版本
nvm use 16.20.0

# 设置默认版本
nvm alias default 16.20.0

核心要点: 每个项目根目录下创建一个 .nvmrc 文件,写上版本号。这样团队成员进入项目时,执行 nvm use 就能自动切换到正确版本。这个习惯帮我省了不少时间。

10.3 Git版本控制:你的代码时光机

没有Git的项目,就像没有刹车的车。你永远不知道什么时候会翻车。我见过有人用「最终版」「最终版2」「打死不改版」来命名文件……嗯,那画面太美我不敢看。

10.3.1 基础配置与工作流

安装Git后,先做全局配置:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

然后是最常用的工作流:

# 初始化仓库
git init

# 添加文件到暂存区
git add .

# 提交到本地仓库
git commit -m "feat: 初始化项目结构"

# 推送到远程仓库
git push origin main

为什么commit信息要写清楚? 你想想看,三个月后你回来看代码,看到「修复bug」这种信息,你根本想不起来修了什么。我习惯用 feat:fix:docs: 这样的前缀,一目了然。

10.3.2 分支管理策略

我个人推荐用Git Flow模型,但不用搞得太复杂。对于AI编程助手项目,我一般这样分:

  • main:主分支,只放稳定版本
  • dev:开发分支,日常开发都在这里
  • feature/xxx:功能分支,开发新功能时从dev拉出来
  • hotfix/xxx:紧急修复分支,从main拉出来
避坑指南: 我曾经直接在main分支上开发,结果同事push了一个半成品,导致线上出问题。从那以后,我严格遵循「永远不要在main上直接写代码」的原则。

10.4 Docker容器化开发环境:一次构建,到处运行

Docker解决了一个经典问题:「在我电脑上能跑啊!」。容器化让你的开发环境与操作系统解耦,不管你是Windows、macOS还是Linux,跑起来都一样。

10.4.1 编写Dockerfile

对于AI编程助手项目,一个典型的Dockerfile长这样:

# 使用Python官方镜像
FROM python:3.10-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY requirements.txt .

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制项目代码
COPY . .

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["python", "main.py"]

为什么用slim版本? 完整版Python镜像有1GB多,slim版只有100MB左右。部署的时候,镜像越小,拉取越快。我在项目中把镜像从1.2GB优化到300MB,部署时间从5分钟缩短到30秒。

10.4.2 使用docker-compose管理多服务

如果你的项目需要同时跑Python后端、Node.js前端、Redis缓存、MySQL数据库,手动启动每个容器会疯掉的。这时候docker-compose就是救星。

version: '3.8'
services:
  backend:
    build: ./backend
    ports:
      - "8000:8000"
    depends_on:
      - redis
      - db

  frontend:
    build: ./frontend
    ports:
      - "3000:3000"

  redis:
    image: redis:7-alpine

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root123

然后一行命令启动所有服务:

docker-compose up -d
注意: 我曾经在docker-compose里忘了配置数据卷,结果容器一删,数据库里的测试数据全没了。记住,数据库一定要挂载数据卷,不然哭都来不及。

10.5 总结:环境搭建的黄金法则

好了,四个工具都讲完了。最后给你三个原则:

  1. 隔离优先:Python用虚拟环境,Node.js用nvm,项目用Docker。别偷懒,每个项目独立环境。
  2. 版本锁定:所有依赖版本都写进配置文件(requirements.txt、package.json、Dockerfile),别用模糊版本号。
  3. 自动化:能用脚本解决的问题,别手动操作。写个setup.sh,一键搭建环境。

环境搭建好了,咱们下一章就开始真正写AI编程助手的代码了。到时候你会发现,前面这些准备工作,每一分钟都是值得的。