4. Python 环境准备:Python3 安装、虚拟环境搭建、requests/urllib3 库安装、日志库 logging 配置

在编写蓝绿发布门禁的 Health Check 脚本之前,必须建立标准、隔离且可复现的 Python 运行环境。本节将依次完成 Python3 安装验证、虚拟环境创建、核心 HTTP 库安装以及日志系统配置,确保后续脚本开发具备一致的基础设施。

4.1 Python3 安装与版本验证

Health Check 脚本依赖 Python 3.8+ 特性(如 f-string、类型提示)。执行以下命令确认环境:

# 检查 Python 版本
python3 --version

# 预期输出示例
Python 3.9.18

# 检查 pip 是否可用
python3 -m pip --version
⚠ 版本陷阱: 若系统默认 python 指向 Python2,务必使用 python3 命令。部分老旧 CentOS 7 自带 Python 2.7,需通过 yum install python3 或源码编译安装 3.8+。
操作系统 安装命令 验证命令
Ubuntu 20.04+ sudo apt install python3 python3-pip python3-venv python3 --version
CentOS 7/8 sudo yum install python3 python3-pip python3 --version
macOS (Homebrew) brew install python@3.9 python3 --version
Windows 官网下载安装包,勾选"Add Python to PATH" py --version

4.2 虚拟环境搭建

虚拟环境隔离项目依赖,避免与系统级 Python 包冲突。蓝绿发布脚本应独立运行在专属虚拟环境中。

4.2.1 创建与激活虚拟环境

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

# 激活虚拟环境(Linux/macOS)
source healthcheck_venv/bin/activate

# 激活虚拟环境(Windows PowerShell)
.\healthcheck_venv\Scripts\Activate.ps1

# 激活后提示符变化,显示 (healthcheck_venv)

4.2.2 验证虚拟环境隔离性

# 查看当前 Python 解释器路径
which python3
# 输出应指向虚拟环境内部路径,如 /home/user/project/healthcheck_venv/bin/python3

# 查看已安装包列表(初始应为空或仅有 pip/setuptools)
pip list
💡 最佳实践: 将虚拟环境目录加入 .gitignore,避免提交到版本库。团队成员通过 requirements.txt 重建环境。
虚拟环境隔离示意图 系统全局 Python Python 3.9.18 已安装包: • requests 2.28.1 • numpy 1.24.3 • flask 2.3.2 • … (系统级) 虚拟环境 healthcheck_venv 已安装包: • requests 2.31.0 • urllib3 2.0.4 • (仅项目依赖) • 无系统包污染 项目代码 healthcheck.py config.yaml requirements.txt 运行时绑定 虚拟环境解释器 虚拟环境完全隔离系统包,项目依赖互不影响,确保 Health Check 脚本可移植性

4.3 requests / urllib3 库安装

Health Check 脚本需要向目标服务发送 HTTP 请求并解析响应。推荐优先使用 requests 库(基于 urllib3 封装,API 更友好),同时安装 urllib3 作为底层依赖。

4.3.1 安装命令

# 确保虚拟环境已激活
pip install requests urllib3

# 指定版本安装(推荐锁定版本)
pip install requests==2.31.0 urllib3==2.0.4

# 查看已安装版本
pip show requests
pip show urllib3

4.3.2 验证安装

# 快速验证:导入并打印版本
python3 -c "import requests; print(requests.__version__)"
# 输出: 2.31.0

python3 -c "import urllib3; print(urllib3.__version__)"
# 输出: 2.0.4
📌 版本选择说明: requests 2.31.0 修复了 CVE-2023-32681 安全漏洞,urllib3 2.0.x 移除了对 Python 3.6 的支持。若生产环境 Python 版本较低,可降级至 urllib3 1.26.x。

4.4 日志库 logging 配置

Health Check 脚本必须输出结构化日志,用于门禁决策审计和故障排查。Python 标准库 logging 无需额外安装,但需合理配置格式、级别和输出目标。

4.4.1 基础配置模板

import logging
import sys

def setup_logging(log_file="healthcheck.log", level=logging.INFO):
    """
    配置日志系统:同时输出到文件和控制台
    """
    # 创建 logger
    logger = logging.getLogger("HealthCheck")
    logger.setLevel(level)

    # 日志格式:时间 | 级别 | 模块 | 消息
    formatter = logging.Formatter(
        fmt="%(asctime)s | %(levelname)-8s | %(name)s | %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S"
    )

    # 文件处理器(追加模式)
    file_handler = logging.FileHandler(log_file, mode="a", encoding="utf-8")
    file_handler.setFormatter(formatter)
    logger.addHandler(file_handler)

    # 控制台处理器
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setFormatter(formatter)
    logger.addHandler(console_handler)

    return logger

# 使用示例
logger = setup_logging()
logger.info("Health Check 脚本启动")
logger.warning("响应时间超过阈值: 2.3s")
logger.error("连接目标服务失败: Connection refused")

4.4.2 日志级别与使用场景

级别 数值 Health Check 典型场景
DEBUG 10 记录每次 HTTP 请求的完整 URL、请求头、响应体(调试用)
INFO 20 服务正常、门禁通过、版本切换成功等常规事件
WARNING 30 响应时间接近阈值、重试发生、非关键字段缺失
ERROR 40 连接失败、HTTP 5xx、门禁拒绝、脚本异常终止
CRITICAL 50 蓝绿发布门禁系统自身故障、配置加载失败

4.4.3 日志输出示例

# 控制台输出
2025-03-21 14:30:01 | INFO     | HealthCheck | 开始健康检查: http://blue-app:8080/health
2025-03-21 14:30:01 | DEBUG    | HealthCheck | 请求头: {"User-Agent": "HealthCheck/1.0"}
2025-03-21 14:30:01 | INFO     | HealthCheck | 响应状态: 200 OK, 耗时: 0.32s
2025-03-21 14:30:01 | INFO     | HealthCheck | 门禁决策: PASS (所有检查项通过)

# 文件日志(healthcheck.log)相同格式,便于后续日志采集
💡 生产建议: 生产环境建议将日志级别设为 WARNING 以减少磁盘 I/O;调试阶段使用 DEBUG。日志文件应配置轮转(RotatingFileHandler),避免单文件无限增长。

4.5 环境准备清单

完成本节所有步骤后,使用以下清单验证环境完整性:

  1. Python3 版本:≥ 3.8,可通过 python3 --version 确认
  2. 虚拟环境:已激活,which python3 指向 venv 内部路径
  3. requests 库:已安装,python3 -c "import requests" 无报错
  4. urllib3 库:已安装,作为 requests 的底层依赖
  5. logging 配置:脚本可正常输出带时间戳的日志到文件和控制台
环境准备完成状态 ✅ Python 3.8+ python3 --version ✅ 虚拟环境 venv 已激活 ✅ requests 2.31.0 ✅ urllib3 2.0.4 ✅ logging 文件+控制台 所有组件就绪,可进入下一节:Health Check 脚本核心逻辑编写 建议将以上依赖写入 requirements.txt 以便团队复用

4.6 生成 requirements.txt

锁定依赖版本,确保所有环境一致:

# 生成当前环境的依赖清单
pip freeze > requirements.txt

# 查看生成的 requirements.txt 内容
cat requirements.txt

# 输出示例:
# requests==2.31.0
# urllib3==2.0.4
# certifi==2023.7.22
# charset-normalizer==3.2.0
# idna==3.4
📌 团队协作: 其他成员克隆项目后,执行 pip install -r requirements.txt 即可一键重建完全相同的依赖环境,避免"在我机器上能跑"的问题。