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

2eafrhcq  于 2023-10-22  发布在  Python
关注(0)|答案(3)|浏览(154)

我目前正在使用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包。你能帮我拿一下吗?

wd2eg0qa

wd2eg0qa1#

我和你一样面对这个问题。导致此错误的问题是您使用的操作系统和lambda函数使用的操作系统之间的差异。当python安装一个包时,它会创建与您使用的操作系统相关的已安装文件。因此,当您使用使用Linux操作系统创建的部署包时,它将与lambda函数一起工作。
Windows用户有很多方法可以做到这一点,但我建议使用Docker容器来安装您的软件包。
步骤:

  1. pull python:3.8 docker image(这是在写这个答案时lambda支持的最高版本)
    1.运行您的容器与目录与代码挂载到容器作为卷.
    1.现在在容器内导航到挂载文件夹并使用PIP安装所需的软件包。
    1.从容器中出来,现在使用这些已安装的包来构建您的bundle并将其部署在AWS lambda上
    ps:现在当你在windows上执行代码时,它会给予错误,因为安装的软件包是为Linux操作系统构建的
5fjcxozz

5fjcxozz2#

一个可能的解决方案可能是您的操作系统使用不同版本的Python(即3.6)下载依赖项时,要比Lambda函数(即3.7).我建议尝试下载你正在为lambda脚本使用的任何版本的Python,然后例如,如果我希望Python的版本是3.8,我会运行代码:
pip3.8 install -r requirements.txt -t aws-lib

eulz3vhy

eulz3vhy3#

这是一个不固定的issue。这是操作系统兼容性问题
我试着在lambda/windows上切换python版本,但它不起作用。你可以使用docker镜像或在Linux上生成zip来解决这个问题。我在ubuntu ec2上用python3.10测试了zip,它工作正常。

相关问题