AWS Lambda Python:无法导入模块'lambda_function':没有名为'regex._regex'的模块。

4

我目前正在使用 AWS Lambda。以下是代码片段:

import pandas as pd
import re
import nltk
from stop_words import get_stop_words
stopwords = get_stop_words('en')
nltk.download('punkt')
nltk.download('wordnet')
wn = nltk.WordNetLemmatizer()

def lemmatization(txt):
    text = ([wn.lemmatize(word) for word in txt])
    return text

def lambda_handler(event,context):
    
        bucket = "aaabbb"
        key = "cccddd"
        s3_client = boto3.client('s3')
        s3_file = s3_client.get_object(Bucket=bucket, Key=key)
        s3_file_data = s3_file['Body'].read()
        s3_file_data = io.BytesIO(s3_file_data)
        df = pd.read_csv(s3_file_data)

        df['ABC'] = df['ABC'].apply(lambda x: lemmatization(x))
        print(df)

然而,我一直收到这个错误提示:
Unable to import module 'lambda_function': No module named 'regex._regex'

我已经导入了nltk和regex包。你能帮我处理一下吗?

3个回答

3
我像你一样遇到了这个问题。导致此错误的问题是您使用的操作系统与 Lambda 函数使用的操作系统之间的差异。当 Python 安装一个软件包时,它会根据您使用的操作系统创建已安装的文件。因此,当您使用使用 Linux 操作系统创建的部署捆绑包时,它将与 Lambda 函数配合工作。
对于Windows用户,有许多方法可以解决这个问题,但我建议使用Docker容器来安装您的软件包。
执行以下步骤:
  1. 拉取 python:3.8 Docker 镜像(撰写本答案时,这是 Lambda 支持的最高版本)
  2. 使用代码目录作为卷将您的容器运行到容器中。
  3. 现在进入容器并导航到挂载的文件夹中,并使用 pip 安装所需的包。
  4. 退出容器后,现在使用这些安装的包构建您的捆绑包,并将其部署到 AWS lambda 上
附注:现在当您在 Windows 上执行代码时,它会出现错误,因为安装的包是针对 Linux 操作系统构建的。

@FarimanKashani 我创建了一个演示仓库,使用Docker进行构建和部署,希望对你有所帮助。https://github.com/zijing07/aws-lambda-python-deploy - zijing07

1
可能的解决方案是,当您下载依赖项时,您的操作系统使用不同版本的Python(即3.6)而不是Lambda函数(即3.7)。我建议尝试下载与您的lambda脚本使用的Python版本相同的版本,例如,如果我想要Python版本为3.8,则会运行以下代码:
pip3.8 install -r requirements.txt -t aws-lib

OP正在使用AWS Lambda,您不能只是执行“pip install”。 - baduker
这对我有用。我使用 AWS Linux 创建了 nltk 层,其中 yum install python3 安装了 Python 3.7.9,在导入时会导致 OP's 错误. 修改 Lambda 的运行时为 3.7 解决了这个问题。 - shadesofdarkred

0

这是一个未解决的问题。它是一个操作系统兼容性问题

我尝试在 Lambda/Windows 上切换 Python 版本,但没有成功。您可以使用 Docker 镜像或生成 Linux 版的 zip 文件来解决此问题。我在 Ubuntu EC2 上测试了使用 Python 3.10 进行 zip 操作,它有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接