我目前正在使用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条答案
按热度按时间wd2eg0qa1#
我和你一样面对这个问题。导致此错误的问题是您使用的操作系统和lambda函数使用的操作系统之间的差异。当python安装一个包时,它会创建与您使用的操作系统相关的已安装文件。因此,当您使用使用Linux操作系统创建的部署包时,它将与lambda函数一起工作。
Windows用户有很多方法可以做到这一点,但我建议使用Docker容器来安装您的软件包。
步骤:
1.运行您的容器与目录与代码挂载到容器作为卷.
1.现在在容器内导航到挂载文件夹并使用PIP安装所需的软件包。
1.从容器中出来,现在使用这些已安装的包来构建您的bundle并将其部署在AWS lambda上
ps:现在当你在windows上执行代码时,它会给予错误,因为安装的软件包是为Linux操作系统构建的
5fjcxozz2#
一个可能的解决方案可能是您的操作系统使用不同版本的Python(即3.6)下载依赖项时,要比Lambda函数(即3.7).我建议尝试下载你正在为lambda脚本使用的任何版本的Python,然后例如,如果我希望Python的版本是3.8,我会运行代码:
pip3.8 install -r requirements.txt -t aws-lib
。eulz3vhy3#
这是一个不固定的issue。这是操作系统兼容性问题
我试着在lambda/windows上切换python版本,但它不起作用。你可以使用docker镜像或在Linux上生成zip来解决这个问题。我在ubuntu ec2上用python3.10测试了zip,它工作正常。