AWS Lambda python:无法导入模块“lambda_function”:没有名为“regex._regex”的模块

问题描述 投票:0回答: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 包。你能帮我吗?

python-3.x regex aws-lambda nltk
4个回答
4
投票

我和你一样遇到这个问题。导致此错误的问题是您使用的操作系统和 lambda 函数使用的操作系统不同。当 python 安装软件包时,它会根据您使用的操作系统创建已安装的文件。因此,当您使用使用 Linux 操作系统创建的部署包时,它将与 lambda 函数一起使用。

Windows 用户可以通过多种方式执行此操作,但我建议使用 docker 容器来安装软件包。

操作步骤:

  1. pull python:3.8 docker 镜像(这是撰写本答案时 lambda 支持的最高版本)
  2. 使用目录运行容器,并将代码作为卷安装到容器。
  3. 现在在容器内导航到已安装的文件夹并使用 pip 安装所需的包。
  4. 从您的容器中出来,现在使用这些已安装的软件包来构建您的捆绑包并将其部署在 AWS lambda 上

ps:现在当你在 Windows 上执行代码时,它会给出错误,因为安装的软件包是为 Linux 操作系统构建的


1
投票

一个可能的解决方案可能是您的操作系统在下载依赖项时使用与 Lambda 函数(即 3.7)不同的 Python 版本(即 3.6)。我建议尝试下载您用于 lambda 脚本的任何版本的 Python,然后例如,如果我希望 Python 版本为 3.8,我将运行代码:

pip3.8 install -r requirements.txt -t aws-lib 


0
投票

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

我尝试在 lambda/windows 上切换 python 版本,但没有成功。您可以使用 docker 映像或使用 linux 生成 zip 来解决此问题。我测试了使用 python 3.10 在 ubuntu ec2 上进行 zip 操作,它有效


0
投票

我也遇到过类似的问题。这是由于操作系统兼容性问题。 我使用的是 Mac。 这已经为我解决了: pip install regex --platform=manylinux2014_x86_64 --only-binary=:all: --target ./create_layer/lib/python3.11/site-packages(要下载包的位置)

© www.soinside.com 2019 - 2024. All rights reserved.