如何在本地开发中安装AWS Synthetics Canaries的aws_synthetics.selenium包?
AWS CloudWatch Synthetics本地开发导入问题解决方案
核心说明
aws_synthetics.selenium模块是AWS CloudWatch Synthetics Canaries运行时环境专属内置的依赖,并没有发布到PyPI,无法通过pip直接安装。它和AWS CDK的aws_cdk.aws_synthetics完全不是同一类包——后者是用于部署Canary基础设施的CDK构造库,和运行时代码依赖无关。
实现本地直接导入的两种方案
方案1:创建本地模拟包结构
在你的项目根目录手动创建以下目录和文件,模拟AWS的模块结构:
- 创建
aws_synthetics目录,里面新建空的__init__.py文件 - 在
aws_synthetics下创建selenium目录,里面新建__init__.py文件,写入以下代码:
# 模拟Synthetics的webdriver,实际调用本地selenium from selenium import webdriver as _webdriver synthetics_webdriver = _webdriver # 模拟Synthetics日志工具 import logging synthetics_logger = logging.getLogger("aws_synthetics")
完成后,本地代码就能直接使用from aws_synthetics.selenium import synthetics_webdriver as webdriver的导入语句,无需环境判断。
方案2:使用mock动态注入模块
在本地运行/测试代码的入口处,用unittest.mock动态模拟aws_synthetics模块:
import sys from unittest.mock import MagicMock from selenium import webdriver import logging # 构建模拟模块 mock_aws_synthetics = MagicMock() mock_aws_synthetics.selenium.synthetics_webdriver = webdriver mock_aws_synthetics.selenium.synthetics_logger = logging.getLogger("aws_synthetics") # 注入到系统模块列表 sys.modules["aws_synthetics"] = mock_aws_synthetics sys.modules["aws_synthetics.selenium"] = mock_aws_synthetics.selenium # 现在可以直接导入 from aws_synthetics.selenium import synthetics_webdriver as webdriver
注意事项
以上模拟仅保证导入正常和基础功能运行,Synthetics运行时专属的特殊API(比如运行状态上报、特定日志格式处理)在本地环境无法直接使用,若用到这类功能需要额外编写模拟逻辑。
内容的提问来源于stack exchange,提问作者Aleksander Fidelus
相关产品推荐
相关产品推荐

