You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda函数无法识别regex库的问题求助(已尝试多种方案)

解决AWS Lambda Python 3.10中regex库导入错误(找不到regex._regex)

问题描述

开发AWS Lambda函数时使用regex库解析输入,代码片段如下:

import regex

def lambda_handler(event, context):
    
    ...

    pattern = r'\{(\w+)\}'
    text_variables = regex.findall(pattern, mail_body)
    for t_var in text_variables:
        if t_var not in variables:
            error_list.append(f"An unregistered variable name was used in the mail body, specifically {t_var}.")

测试时出现导入错误(处理程序文件为app.py):

{
  "errorMessage": "Unable to import module 'app': No module named 'regex._regex'",
  "errorType": "Runtime.ImportModuleError",
  "requestId": "XXXXX",
  "stackTrace": []
}

已确认处理程序设置为app.lambda_handler,尝试过创建Layer、直接打包部署包两种方案,均未解决问题,当前使用Python 3.10运行时。添加Layer后错误从“找不到regex模块”变为“找不到regex._regex”,已知_regex是regex的依赖模块。

解决方案

1. 构建兼容Lambda环境的regex包

regex库包含C扩展模块_regex,该模块是编译后的二进制文件,与操作系统、Python版本强相关。Lambda的Python 3.10运行时基于Amazon Linux 2,本地(Windows/macOS)安装的包无法兼容,必须在匹配环境中构建:

方法一:使用Docker模拟Lambda环境

运行以下命令,在Docker容器中安装兼容的regex包:

docker run -v "$PWD":/var/task public.ecr.aws/sam/build-python3.10:latest /bin/bash -c "pip install regex -t python/lib/python3.10/site-packages/"

执行完成后,当前目录会生成python文件夹,将其压缩为zip包(压缩时直接包含python目录,而非目录内的文件),上传作为Lambda Layer。

方法二:在Amazon Linux 2 EC2实例上构建

  1. 启动一台Amazon Linux 2的EC2实例,安装Python 3.10:
    sudo amazon-linux-extras install python3.10
    
  2. 创建目录并安装regex:
    mkdir -p python/lib/python3.10/site-packages
    pip3.10 install regex -t python/lib/python3.10/site-packages/
    
  3. 打包并下载:
    zip -r regex-layer.zip python/
    
    将生成的regex-layer.zip下载后作为Lambda Layer上传。

2. 正确构建部署包(直接打包方式)

若选择将regex直接打包进部署包,同样需在兼容环境中操作:

# 进入你的Lambda项目目录
cd your-lambda-project
# 创建lib目录存放依赖
mkdir -p lib
# 安装regex到lib目录
pip3.10 install regex -t lib/
# 打包app.py和lib目录(注意不要包含外层项目目录)
zip -r lambda-deploy.zip app.py lib/

将生成的lambda-deploy.zip上传至Lambda即可。

3. 排查Layer配置问题

  • 确保Layer的运行时选择Python 3.10
  • 检查Layer压缩包结构:解压后必须能看到python/lib/python3.10/site-packages/regex目录和_regex.so文件
  • 避免同时使用Layer和部署包中的regex,防止依赖冲突,只保留一种方式即可

原因说明

regex._regex是regex库的C扩展模块,负责核心正则匹配逻辑,必须在与Lambda运行时一致的操作系统(Amazon Linux 2)和Python版本(3.10)环境下编译生成。本地环境编译的模块无法在Lambda环境中加载,因此会出现找不到模块的错误。

内容的提问来源于stack exchange,提问作者Spiridon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:32:32