3. 测试环境搭建:Python虚拟环境配置、依赖库安装

在开始供应链控制塔异常检测链路的测试验证之前,必须建立一个干净、可复现的Python运行环境。本章将指导你完成从虚拟环境创建到核心依赖库安装的全过程,确保所有测试用例在一致的软件栈上执行,避免因环境差异导致的误判。

3.1 环境准备清单

下表列出了搭建测试环境所需的软件组件及其推荐版本。请在实际操作前确认系统已安装Python 3.9+及pip包管理器。

组件 推荐版本 用途说明
Python 3.9 ~ 3.12 运行时基础解释器
pip ≥ 23.0 包依赖管理工具
venv 内置模块 创建隔离虚拟环境
pandas ≥ 2.0 时序数据清洗与特征工程
numpy ≥ 1.24 数值计算与矩阵运算
scikit-learn ≥ 1.3 异常检测模型训练与评估
matplotlib ≥ 3.7 检测结果可视化与报告生成
kafka-python ≥ 2.0 Kafka消息队列消费与生产
版本兼容性提示: 建议使用Python 3.10作为基准版本,该版本对上述所有库的二进制wheel支持最完整,可避免编译安装带来的额外耗时。

3.2 虚拟环境创建与激活

虚拟环境是Python项目隔离的最佳实践。以下步骤演示如何为异常检测链路测试创建专用环境。

  1. 创建项目目录:在合适位置新建文件夹 scm_ct_test,作为所有测试脚本和数据的根目录。
  2. 初始化虚拟环境:在终端中进入该目录,执行以下命令创建名为 .venv 的虚拟环境。
cd scm_ct_test
python -m venv .venv
  1. 激活虚拟环境:根据操作系统选择对应激活命令。
操作系统 激活命令
Windows (CMD) .venv\Scripts\activate.bat
Windows (PowerShell) .venv\Scripts\Activate.ps1
macOS / Linux source .venv/bin/activate

激活成功后,终端提示符前会出现 (.venv) 前缀,表示当前已进入隔离环境。

常见错误: 如果Windows PowerShell提示执行策略限制,请先以管理员身份运行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,然后重新激活。

3.3 依赖库批量安装

为便于团队协作和环境复现,建议将所有依赖写入 requirements.txt 文件,然后通过pip一次性安装。

  1. 创建依赖清单:在项目根目录新建 requirements.txt,写入以下内容。
pandas>=2.0, <3.0
numpy>=1.24, <2.0
scikit-learn>=1.3, <2.0
matplotlib>=3.7, <4.0
kafka-python>=2.0, <3.0
  1. 执行安装:确保虚拟环境已激活,运行以下命令。
pip install -r requirements.txt
  1. 验证安装结果:通过Python交互式解释器逐一导入各库,确认版本符合预期。
python -c "import pandas; print('pandas', pandas.__version__)"
python -c "import numpy; print('numpy', numpy.__version__)"
python -c "import sklearn; print('scikit-learn', sklearn.__version__)"
python -c "import matplotlib; print('matplotlib', matplotlib.__version__)"
python -c "import kafka; print('kafka-python', kafka.__version__)"
离线环境安装方案: 若测试环境无法访问外网,可先在能联网的机器上执行 pip download -r requirements.txt -d ./offline_pkgs 下载所有wheel包,然后拷贝到离线环境执行 pip install --no-index --find-links ./offline_pkgs -r requirements.txt。

3.4 环境架构总览

下图展示了测试环境中各组件之间的逻辑关系与数据流向。虚拟环境作为隔离层,承载所有Python库;pandas和numpy负责数据预处理,scikit-learn执行异常检测算法,matplotlib生成可视化报告,kafka-python则连接消息中间件实现实时数据接入。

测试环境软件架构与数据流 Python虚拟环境 (.venv) Kafka 消息队列 实时订单/库存事件 pandas + numpy 数据清洗 / 特征工程 scikit-learn 异常检测模型 matplotlib 结果可视化 / 报告 环境验证要点 • 所有库必须安装在虚拟环境内部,禁止使用系统全局Python • 安装完成后执行版本验证脚本,确保无ImportError • 将requirements.txt纳入版本控制,保证团队环境一致

3.5 环境验证脚本

完成安装后,建议编写一个完整的验证脚本 check_env.py,一次性检查所有依赖是否就绪。该脚本也可作为CI/CD流水线中的前置检查步骤。

#!/usr/bin/env python
"""供应链控制塔测试环境验证脚本"""

import sys
import importlib

REQUIRED_PACKAGES = [
    ('pandas', '2.0.0'),
    ('numpy', '1.24.0'),
    ('sklearn', '1.3.0'),
    ('matplotlib', '3.7.0'),
    ('kafka', '2.0.0'),
]

def check_environment():
    print("=" * 50)
    print("测试环境依赖检查")
    print("=" * 50)
    print(f"Python版本: {sys.version.split()[0]}\n")

    all_ok = True
    for pkg_name, min_ver in REQUIRED_PACKAGES:
        try:
            mod = importlib.import_module(pkg_name)
            ver = getattr(mod, '__version__', 'unknown')
            status = "✓" if ver >= min_ver else "⚠"
            print(f"  {status} {pkg_name:20s} 版本 {ver:10s} (要求 ≥ {min_ver})")
            if ver < min_ver:
                all_ok = False
        except ImportError:
            print(f"  ✗ {pkg_name:20s} 未安装")
            all_ok = False

    print("\n" + "=" * 50)
    if all_ok:
        print("  环境验证通过,可以开始测试!")
    else:
        print("  环境存在缺失或版本过低,请修正后重试。")
    print("=" * 50)

if __name__ == "__main__":
    check_environment()
执行方式: 在激活的虚拟环境中运行 python check_env.py,脚本将输出每个库的安装状态和版本号,并用符号标记是否满足最低版本要求。

3.6 常见问题与排查

  • pip安装超时:使用国内镜像源加速,例如 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple。
  • kafka-python与librdkafka冲突:kafka-python为纯Python实现,无需编译C扩展,若遇到冲突请确保未同时安装confluent-kafka。
  • matplotlib后端警告:在无GUI的服务器上运行时,在脚本开头添加 import matplotlib; matplotlib.use('Agg') 切换为非交互式后端。
  • 虚拟环境路径包含中文或空格:某些库在编译时可能因路径编码问题失败,建议项目路径仅使用英文字母、数字和下划线。