3. 开发环境搭建

供应链计划系统的仿真工程落地,依赖一套标准化的本地开发环境。本章将引导你完成从Python解释器、虚拟环境管理、版本控制到容器化运行环境的全链路搭建。所有工具版本均经过兼容性验证,确保后续章节的仿真模型与调度引擎能够无冲突运行。

3.1 环境全景与版本依赖

在开始安装前,先明确各组件在仿真工程中的角色与推荐版本。下表列出了核心工具链及其用途:

组件 推荐版本 工程角色 关键依赖
Python 3.11.x 仿真引擎、数据处理、算法实现 numpy, pandas, simpy, ortools
Anaconda 2024.10+ 虚拟环境隔离、包管理、Jupyter集成 conda 24.x
Git 2.40+ 代码版本控制、分支策略、协作基线 Git LFS (大文件存储)
Docker Desktop 4.30+ 容器化部署、环境一致性、CI/CD流水线 WSL2 (Windows) / HyperKit (macOS)
版本选择说明:Python 3.11 相比 3.10 在字典操作和异常处理上有显著性能提升,且与 simpy 4.1+ 完全兼容。避免使用 Python 3.12+,部分供应链优化库(如 pulp 2.8)尚未完成适配。

3.2 Python 3.11+ 安装与验证

Python 是仿真模型的核心运行环境。推荐从 python.org 下载官方安装包,安装时务必勾选 "Add Python to PATH"。

安装完成后,打开终端(Windows 使用 PowerShell 或 CMD,macOS/Linux 使用 bash)执行验证:

# 验证 Python 版本
python --version
# 输出示例:Python 3.11.9

# 验证 pip 包管理器
pip --version
# 输出示例:pip 24.2 from ... (python 3.11)

# 测试基础数学库
python -c "import math; print(math.pi)"
# 输出:3.141592653589793
常见问题:Windows 用户若在 PowerShell 中输入 python 后弹出 Microsoft Store,请检查系统环境变量 PATH 中是否包含 Python 安装路径(通常为 C:\Users\用户名\AppData\Local\Programs\Python\Python311\),并将其上移至系统变量首位。

3.3 Anaconda 虚拟环境配置

Anaconda 提供隔离的 Python 环境,避免不同项目间的包冲突。对于供应链仿真项目,建议为每个仿真场景创建独立环境。

3.3.1 安装 Anaconda

从 anaconda.com/download 下载对应操作系统的图形化安装包。安装过程中保持默认选项,但建议取消勾选 "Add Anaconda to my PATH environment variable"(避免与系统 Python 冲突),后续通过 Anaconda Prompt 或初始化 conda 命令使用。

3.3.2 创建仿真专用虚拟环境

打开终端(或 Anaconda Prompt),执行以下命令创建名为 scm_sim 的环境,指定 Python 3.11:

# 创建虚拟环境
conda create -n scm_sim python=3.11 -y

# 激活环境
conda activate scm_sim

# 验证环境内 Python 版本
python --version
# 输出:Python 3.11.9

# 安装核心仿真依赖
pip install numpy==1.26.4 pandas==2.2.2 simpy==4.1.1 ortools==9.10.4067 matplotlib==3.9.1

# 导出环境配置(用于团队共享)
conda env export > environment.yml

环境配置文件 environment.yml 的内容示例如下:

name: scm_sim
channels:
  - defaults
dependencies:
  - python=3.11.9
  - pip
  - pip:
    - numpy==1.26.4
    - pandas==2.2.2
    - simpy==4.1.1
    - ortools==9.10.4067
    - matplotlib==3.9.1
团队协作提示:将 environment.yml 纳入 Git 版本管理。新成员克隆仓库后,只需执行 conda env create -f environment.yml 即可复现完全一致的仿真环境。

3.4 Git 版本控制初始化

Git 用于追踪仿真模型的每一次变更,支持分支开发与回滚。以下是供应链仿真项目的标准 Git 初始化流程。

3.4.1 安装与全局配置

# 安装 Git(macOS: brew install git; Ubuntu: sudo apt install git; Windows: 下载安装包)
# 验证安装
git --version
# 输出:git version 2.45.2

# 配置用户名和邮箱(用于提交记录)
git config --global user.name "Your Name"
git config --global user.email "your.email@company.com"

# 配置默认分支名为 main
git config --global init.defaultBranch main

# 配置换行符自动转换(跨平台协作)
git config --global core.autocrlf input  # macOS/Linux
# git config --global core.autocrlf true  # Windows

3.4.2 初始化仿真项目仓库

# 创建项目目录
mkdir scm-simulation-lab
cd scm-simulation-lab

# 初始化 Git 仓库
git init

# 创建 .gitignore 文件(排除虚拟环境和临时文件)
echo "env/" >> .gitignore
echo "__pycache__/" >> .gitignore
echo "*.pyc" >> .gitignore
echo ".DS_Store" >> .gitignore
echo "*.log" >> .gitignore

# 创建标准目录结构
mkdir -p src/simulations src/optimization data/input data/output docs tests

# 首次提交
git add .
git commit -m "chore: 初始化供应链仿真项目结构"

下图展示了仿真项目的标准 Git 分支策略与目录结构:

供应链仿真项目 Git 分支策略与目录结构 Git 分支策略与项目目录结构 main (生产) develop (开发) feature/* (特性) 项目目录结构 (scm-simulation-lab/) ├── src/ ├── simulations/ # 仿真模型 (simpy 实现) ├── optimization/ # 优化算法 (ortools) ├── data/ ├── input/ # 输入参数 (JSON/CSV) ├── output/ # 仿真结果 (Parquet) ├── tests/ # 单元测试 (pytest) ├── docs/ # 技术文档 ├── environment.yml # Conda 环境锁文件 └── .gitignore # Git 忽略规则

3.5 Docker Desktop 安装与容器化配置

Docker 将仿真环境打包为轻量级容器,确保在开发、测试、生产环境中的行为完全一致。对于供应链计划系统,Docker 用于部署仿真调度引擎和 API 服务。

3.5.1 安装 Docker Desktop

根据操作系统选择安装方式:

  • Windows: 下载 Docker Desktop for Windows,安装时启用 WSL 2 后端。安装完成后在 PowerShell 执行 wsl --set-default-version 2。
  • macOS: 下载 Docker Desktop for Mac (Apple Silicon 或 Intel 版本)。安装后可在菜单栏看到 Docker 图标。
  • Linux: 通过包管理器安装 docker-ce 和 docker-compose-plugin,然后启动服务 sudo systemctl start docker。

3.5.2 验证 Docker 环境

# 验证 Docker 版本
docker --version
# 输出:Docker version 26.1.4, build 5650f9b

# 验证 Docker Compose
docker compose version
# 输出:Docker Compose version v2.29.2

# 运行测试容器
docker run hello-world
# 输出:Hello from Docker! ...(表示安装成功)

3.5.3 创建仿真服务的 Dockerfile

以下 Dockerfile 将仿真环境打包为容器镜像,包含所有 Python 依赖:

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

# 设置工作目录
WORKDIR /app

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

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

# 复制仿真代码
COPY src/ ./src/
COPY data/ ./data/

# 暴露仿真 API 端口
EXPOSE 8000

# 默认启动命令
CMD ["python", "src/main.py"]

对应的 requirements.txt 文件内容:

numpy==1.26.4
pandas==2.2.2
simpy==4.1.1
ortools==9.10.4067
fastapi==0.115.0
uvicorn==0.30.6

3.5.4 使用 Docker Compose 编排多服务

对于包含仿真引擎、数据库、消息队列的复杂场景,使用 docker-compose.yml 统一管理:

version: '3.8'

services:
  simulation-engine:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./data:/app/data
    environment:
      - PYTHONUNBUFFERED=1
    depends_on:
      - redis-cache

  redis-cache:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data

volumes:
  redis-data:
工程实践:在开发阶段,使用 docker compose up --build 启动服务。每次修改代码后,Docker 会利用层缓存加速构建。生产部署时,建议使用 docker compose up -d 后台运行。

3.6 环境验证清单

完成上述安装后,执行以下验证脚本,确保所有组件协同工作:

# 验证脚本:check_env.py
import sys
import numpy as np
import pandas as pd
import simpy
from ortools.sat.python import cp_model

print(f"Python 版本: {sys.version}")
print(f"NumPy 版本: {np.__version__}")
print(f"Pandas 版本: {pd.__version__}")
print(f"SimPy 版本: {simpy.__version__}")

# 简单仿真测试
def simple_simulation():
    env = simpy.Environment()
    def process(env):
        yield env.timeout(5)
    env.process(process(env))
    env.run()
    print("SimPy 仿真引擎: 运行正常")

simple_simulation()

# OR-Tools 求解器测试
model = cp_model.CpModel()
x = model.NewIntVar(0, 10, 'x')
model.Add(x > 5)
solver = cp_model.CpSolver()
status = solver.Solve(model)
print(f"OR-Tools 求解器: {'正常' if status == cp_model.OPTIMAL else '异常'}")

执行 python check_env.py,若所有组件输出正常,则开发环境搭建完成。

故障排查:若 OR-Tools 导入失败,请确认已安装 ortools 而非 or-tools。若 SimPy 版本低于 4.1,请执行 pip install --upgrade simpy。Docker 容器内若无法连接 Redis,检查 docker compose 网络配置中的服务名是否正确。

3.7 本章小结

本章完成了供应链仿真系统的完整开发环境搭建:

  • Python 3.11+ 作为仿真与优化引擎的运行基础。
  • Anaconda 虚拟环境 实现项目级依赖隔离,通过 environment.yml 支持团队复现。
  • Git 版本控制 建立分支策略与标准目录结构,保障代码可追溯。
  • Docker Desktop 提供容器化运行环境,确保开发与生产环境一致。