2. 环境配置基础:操作系统选择、Python版本管理与虚拟环境搭建

补货计划系统的工程落地,首先需要建立一套稳定、可复现的运行环境。环境配置的决策直接影响后续依赖管理、部署流水线以及生产运维的复杂度。本节从操作系统选型、Python版本管理、虚拟环境搭建三个层面展开,为后续的补货算法开发与系统集成奠定基础。

2.1 操作系统选择:Linux vs Windows

在供应链计划系统中,补货模块通常作为微服务或批处理任务运行。操作系统的选择需要综合考虑开发效率、运行时稳定性、容器化兼容性以及团队技术栈。

对比维度 Linux(推荐 Ubuntu 22.04 LTS / CentOS Stream 9) Windows Server 2022
生产环境占比 超过 90% 的云原生与容器化部署 约 5-8%,多见于传统 ERP 集成场景
Python 生态兼容性 原生支持,编译扩展(如 numpy/scipy)预编译包完善 需安装 VC++ 编译工具链,部分科学计算库存在路径编码问题
容器化支持 Docker/Podman 原生运行,镜像体积小 需启用 WSL2 或 Hyper-V,镜像体积大
补货调度工具 cron / systemd timer / Airflow 原生支持 Task Scheduler / Airflow 需额外配置
文件系统与路径 区分大小写,路径分隔符为 / 不区分大小写,路径分隔符为 \
运维成本 命令行操作,自动化脚本成熟 GUI 与 PowerShell 混合,自动化门槛较高
工程建议: 开发团队统一使用 Linux 环境(推荐 Ubuntu 22.04 LTS),可大幅降低环境差异导致的“在我机器上能跑”问题。若团队必须使用 Windows 开发,建议通过 WSL2 或 Dev Containers 保持与生产环境一致。

2.2 Python 版本管理

补货计划系统依赖多个数据科学库(pandas、numpy、scikit-learn)和 Web 框架(FastAPI、Flask)。不同库对 Python 版本有严格兼容要求,因此版本管理是环境配置的核心环节。

2.2.1 版本选择策略

  • 生产环境: 选择 Python 3.10 或 3.11(当前 LTS 兼容性最佳,pandas 2.x 与 numpy 1.24+ 均稳定支持)。
  • 开发环境: 与生产环境保持大版本一致,小版本可略高(如 3.11.9),用于提前验证新特性。
  • 避免: 使用 Python 3.7 以下(已停止安全更新)或 Python 3.13+(部分供应链库尚未适配)。

2.2.2 版本管理工具对比

工具 适用场景 核心命令 优点 缺点
pyenv 单机多版本切换 pyenv install 3.11.9
pyenv global 3.11.9
轻量、无侵入、支持源码编译 Windows 需通过 pyenv-win 或 WSL2
conda 数据科学/复杂依赖环境 conda create -n repl python=3.11 同时管理 Python 版本与非 Python 库(如 HDF5、ICU) 环境体积大,包解析速度较慢
系统包管理器 CI/CD 容器镜像构建 apt install python3.11 与系统集成度高 版本选择受限,不易切换
推荐组合: 开发机使用 pyenv 管理 Python 版本 + venv 管理项目虚拟环境;CI/CD 流水线使用 Docker 镜像固定 Python 版本(如 python:3.11-slim)。

2.3 虚拟环境搭建:venv 与 conda

虚拟环境用于隔离不同项目的依赖,避免全局包冲突。补货计划系统通常包含多个微服务(需求预测、库存优化、补货执行),每个服务应有独立的虚拟环境。

2.3.1 venv(Python 内置,推荐轻量项目)

venv 是 Python 3.3+ 内置的虚拟环境工具,无需额外安装,适合纯 Python 依赖的补货计算模块。

# 创建虚拟环境(在项目根目录执行)
python3.11 -m venv .venv

# 激活环境(Linux/macOS)
source .venv/bin/activate

# 激活环境(Windows PowerShell)
.venv\Scripts\Activate.ps1

# 安装补货计划核心依赖
pip install --upgrade pip
pip install pandas==2.1.4 numpy==1.26.2 scikit-learn==1.3.2
pip install fastapi==0.104.1 uvicorn==0.24.0

# 冻结依赖清单
pip freeze > requirements.txt

# 退出环境
deactivate

2.3.2 conda(适合数据科学 + 非 Python 依赖)

当补货系统需要集成 C++ 扩展库(如 OR-Tools、COIN-OR)或特定版本的 BLAS/LAPACK 时,conda 的二进制包管理优势明显。

# 创建 conda 环境并指定 Python 版本
conda create -n replenishment python=3.11

# 激活环境
conda activate replenishment

# 安装补货相关包(conda 优先,pip 补充)
conda install pandas numpy scikit-learn
conda install -c conda-forge ortools
pip install fastapi uvicorn  # conda 源未收录时用 pip

# 导出环境配置
conda env export > environment.yml

# 退出环境
conda deactivate

2.3.3 venv vs conda 选型决策

决策条件 推荐方案 原因
纯 Python 项目,依赖全部来自 PyPI venv + pip 轻量、标准、CI/CD 镜像构建快
项目依赖 OR-Tools、Gurobi、CoinOR 等 C++ 库 conda conda 提供预编译二进制,避免源码编译失败
团队使用 Windows 且不愿配置 WSL2 conda conda 在 Windows 上对科学计算库支持更完善
Docker 容器化部署 venv(在 Dockerfile 中) 镜像层更少,构建缓存更高效

2.4 环境配置架构总览

下图展示了从操作系统到虚拟环境的完整配置链路,以及各层在补货计划系统中的作用。

补货计划系统环境配置架构 操作系统层 Linux (Ubuntu 22.04 LTS) | Windows Server (WSL2 兼容) Python 版本管理层 pyenv (开发) | Docker 镜像 (生产) | 版本锁定: 3.10 / 3.11 虚拟环境层 venv (轻量) | conda (科学计算) | 环境隔离 依赖与配置层 requirements.txt | environment.yml | .env | Dockerfile 各层独立演进,上层依赖下层接口,通过 Docker 容器实现环境一致性

2.5 常见问题与避坑指南

⚠ 路径编码问题: 在 Windows 上使用 venv 时,若项目路径包含中文字符或空格,可能导致 pip 安装失败。解决方案:项目根目录使用纯英文路径,或迁移至 WSL2 环境。
  • Python 版本不匹配: 使用 python --version 确认当前环境版本;在 pyproject.toml 中通过 requires-python = ">=3.10, <3.12" 约束。
  • 虚拟环境激活失败: 检查执行策略(Windows PowerShell 需 Set-ExecutionPolicy RemoteSigned);Linux 下确认 source 命令正确。
  • 依赖冲突: 补货系统常同时依赖 pandas 与 polars,两者可能因 Arrow 版本冲突。建议使用 pip install --dry-run 预检依赖树。
  • conda 环境膨胀: 定期使用 conda clean --all 清理缓存;避免在基础环境中安装包,始终使用命名环境。

2.6 环境验证清单

完成环境配置后,建议执行以下验证步骤,确保补货计划系统的基础环境就绪:

  1. 操作系统验证: uname -a(Linux)或 systeminfo | findstr /B /C:"OS Name"(Windows)
  2. Python 版本验证: python --version 输出应为 Python 3.11.x
  3. 虚拟环境验证: which python(Linux/macOS)或 where python(Windows)指向项目虚拟环境路径
  4. 核心依赖验证: 运行 python -c "import pandas; import numpy; import sklearn; print('OK')"
  5. 路径兼容性验证: 在项目根目录创建包含中文路径的临时文件,确认 pandas.read_csv() 可正常读取
自动化建议: 将上述验证步骤写入 Makefile 或 scripts/verify_env.sh,纳入 CI 流水线的前置检查阶段,确保每次环境变更后自动验证。