4. 仿真核心依赖库:SimPy、NumPy、Pandas、Matplotlib、NetworkX 的安装与版本锁定

供应链场景仿真工程并非从零编写所有算法,而是建立在成熟的开源科学计算与仿真库之上。本章聚焦五个核心依赖库的定位、安装策略与版本锁定方法,确保团队在不同开发环境(Windows / macOS / Linux / CI 流水线)中复现一致的仿真行为。

4.1 五大依赖库的职责边界

在进入安装命令之前,必须理解每个库在仿真系统中的具体角色。下表从数据层、建模层、分析层三个维度划分职责:

库名 版本基线(推荐) 核心职责 在仿真工程中的典型用法
SimPy 4.0.x 离散事件仿真引擎 定义仓库补货流程、运输延迟、订单生成器等事件驱动逻辑
NumPy 1.24.x 高性能数值计算与随机数生成 生成需求分布(正态/泊松)、矩阵运算、批量数组操作
Pandas 2.0.x 结构化数据清洗与时间序列处理 加载历史订单表、按 SKU 分组聚合、输出仿真结果 DataFrame
Matplotlib 3.7.x 静态图表与仿真结果可视化 绘制库存水位曲线、订单满足率直方图、多场景对比折线图
NetworkX 3.1.x 图结构与网络分析 构建供应链网络拓扑(工厂→仓库→门店)、计算最短路径与连通性
版本选择原则:推荐锁定各库的 次新稳定大版本(如 NumPy 1.24.x 而非 1.25.x),因为供应链仿真项目通常持续 6–18 个月,次新版本在 API 稳定性与社区支持之间取得最佳平衡。

4.2 环境隔离与安装命令

严禁在系统全局 Python 环境中直接安装依赖。必须使用虚拟环境隔离每个仿真项目的依赖树。以下为基于 venv + pip 的标准操作流程:

  1. 创建虚拟环境(Python 3.9+ 推荐):
python -m venv scm_sim_env
source scm_sim_env/bin/activate   # Linux/macOS
scm_sim_env\Scripts\activate      # Windows
  1. 一次性安装五个核心库:
pip install simpy==4.0.1 numpy==1.24.3 pandas==2.0.3 matplotlib==3.7.2 networkx==3.1
  1. 验证安装版本:
python -c "import simpy,numpy,pandas,matplotlib,networkx; \
print(simpy.__version__, numpy.__version__, pandas.__version__, \
matplotlib.__version__, networkx.__version__)"
输出示例:
4.0.1 1.24.3 2.0.3 3.7.2 3.1
若版本号与预期不符,请检查是否激活了正确的虚拟环境,或是否存在全局包冲突。

4.3 版本锁定的工程化方案

仅靠 pip install 指定版本不足以应对团队协作与 CI/CD 场景。必须使用 requirements.txt 或 pyproject.toml 锁定完整依赖树。以下为两种主流方案的对比:

方案 锁定粒度 适用场景 生成命令
requirements.txt 顶层依赖 + 子依赖全版本 传统 pip 工作流、Docker 构建 pip freeze > requirements.txt
pyproject.toml + poetry.lock 依赖树哈希校验 现代 Python 项目、多环境发布 poetry lock

对于本课程,推荐使用 requirements.txt 方式,因为它与 CI 流水线、Dockerfile 的集成最为直接。锁定后的文件片段示例如下:

simpy==4.0.1
numpy==1.24.3
pandas==2.0.3
matplotlib==3.7.2
networkx==3.1
# 以下为自动锁定的子依赖(示例)
contourpy==1.1.0
cycler==0.11.0
fonttools==4.42.0
kiwisolver==1.4.4
packaging==23.1
pillow==10.0.0
pyparsing==3.0.9
python-dateutil==2.8.2
pytz==2023.3
six==1.16.0
tzdata==2023.3
常见陷阱:不要手动编辑 requirements.txt 中的子依赖版本。每次更新依赖后,重新执行 pip freeze > requirements.txt 覆盖旧文件,否则可能引入不可复现的版本冲突。

4.4 依赖库协作架构图

下图展示了五个核心库在供应链仿真工程中的数据流与调用关系。理解这张图有助于在后续章节中快速定位每个库的代码位置:

仿真核心依赖库协作架构 仿真核心依赖库协作架构 历史订单 / 主数据 Pandas 数据清洗 NumPy 随机数 / 矩阵 SimPy 离散事件引擎 NetworkX 网络拓扑 Matplotlib 结果可视化 数据流方向: 输入 → 清洗 → 计算 → 仿真 → 可视化

4.5 跨平台兼容性检查清单

在团队中推广前,建议逐项验证以下环境要素,避免因操作系统差异导致仿真结果不一致:

  • Python 解释器版本:统一使用 3.9、3.10 或 3.11,避免 3.12 早期版本与 SimPy 4.0 的兼容问题。
  • NumPy 随机数种子:确认 numpy.random.default_rng(seed) 在不同平台上生成相同的序列(NumPy 1.24+ 已保证跨平台一致性)。
  • Matplotlib 字体回退:中文字体在 macOS 与 Linux 上默认不同,需在仿真脚本中显式指定 plt.rcParams['font.sans-serif']。
  • NetworkX 布局算法:spring_layout 等布局函数依赖随机初始化,每次运行前应固定 seed 参数。
工程落地建议:在项目根目录创建 env_check.py 脚本,自动检测上述五项兼容性指标并输出通过/失败状态。将此脚本加入 CI 流水线的第一个步骤,确保所有开发者的环境在进入仿真开发前已对齐。