我目前正在使用 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 包。你能帮我吗?
我和你一样遇到这个问题。导致此错误的问题是您使用的操作系统和 lambda 函数使用的操作系统不同。当 python 安装软件包时,它会根据您使用的操作系统创建已安装的文件。因此,当您使用使用 Linux 操作系统创建的部署包时,它将与 lambda 函数一起使用。
Windows 用户可以通过多种方式执行此操作,但我建议使用 docker 容器来安装软件包。
操作步骤:
ps:现在当你在 Windows 上执行代码时,它会给出错误,因为安装的软件包是为 Linux 操作系统构建的
一个可能的解决方案可能是您的操作系统在下载依赖项时使用与 Lambda 函数(即 3.7)不同的 Python 版本(即 3.6)。我建议尝试下载您用于 lambda 脚本的任何版本的 Python,然后例如,如果我希望 Python 版本为 3.8,我将运行代码:
pip3.8 install -r requirements.txt -t aws-lib
。
这是一个未解决的问题。这是操作系统兼容性问题
我尝试在 lambda/windows 上切换 python 版本,但没有成功。您可以使用 docker 映像或使用 linux 生成 zip 来解决此问题。我测试了使用 python 3.10 在 ubuntu ec2 上进行 zip 操作,它有效
我也遇到过类似的问题。这是由于操作系统兼容性问题。 我使用的是 Mac。 这已经为我解决了: pip install regex --platform=manylinux2014_x86_64 --only-binary=:all: --target ./create_layer/lib/python3.11/site-packages(要下载包的位置)