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.9pyenv 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 环境配置架构总览
下图展示了从操作系统到虚拟环境的完整配置链路,以及各层在补货计划系统中的作用。
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 环境验证清单
完成环境配置后,建议执行以下验证步骤,确保补货计划系统的基础环境就绪:
- 操作系统验证:
uname -a(Linux)或systeminfo | findstr /B /C:"OS Name"(Windows) - Python 版本验证:
python --version输出应为Python 3.11.x - 虚拟环境验证:
which python(Linux/macOS)或where python(Windows)指向项目虚拟环境路径 - 核心依赖验证: 运行
python -c "import pandas; import numpy; import sklearn; print('OK')" - 路径兼容性验证: 在项目根目录创建包含中文路径的临时文件,确认
pandas.read_csv()可正常读取
自动化建议: 将上述验证步骤写入
Makefile 或 scripts/verify_env.sh,纳入 CI 流水线的前置检查阶段,确保每次环境变更后自动验证。