AWS Lambda -- 无法为 SpaCy 导入 srsly.ujson.ujson

Posted

技术标签:

【中文标题】AWS Lambda -- 无法为 SpaCy 导入 srsly.ujson.ujson【英文标题】:AWS Lambda -- Unable to import srsly.ujson.ujson for SpaCy 【发布时间】:2019-12-05 05:08:51 【问题描述】:

我正在尝试将 SpaCy 作为依赖项添加到我的 Python Lambda。我通过使用pip3 install spacy --no-deps -t . 将SpaCy 作为独立依赖项安装在名为dependencies 的目录中来做到这一点,这是因为我无法在我的Lambda 的\tmp 目录中加载整个Spacy 依赖项。

我能够成功地将文件夹上传到 s3 并在 Lambda 调用期间下载它。当我尝试import spacy 时,我收到此错误:[ERROR] Runtime.ImportModuleError: Unable to import module : No module named 'srsly.ujson.ujson'

我在dependencies\ 中手动安装了srsly,并且我拥有按照this link 列出的所有文件。这是由this link 引用的。其中一个回复说,“似乎 Python 无法加载它,因为它没有被编译?”。如何编译包含.c 文件的依赖项?

我在 SO 上发现的另一个问题是 this question,但我已经手动安装了 srsly。如何导入模块?谢谢。


在导入 spacy 之前,我手动检查我的代码是否存在 ujson

if os.path.exists('/tmp/dependencies/srsly/ujson/ujson.c'):
    print('ujson exists')

并且打印语句被打印出来。

【问题讨论】:

您使用的是什么版本的 spacy?你在哪里运行 pip install ?我面临着类似的问题,我认为问题在于我在我的机器上运行 pip install ,但是 lambda 运行时使用 aws linux 并且在我的机器上编译的 C 依赖项在那里不起作用。 @AlexeySmirnov 我在 /tmp/python 的文件夹中运行 pip install 作为 pip3 install spacy --no-deps -t . 。是的,我认为问题也可能出在 python3.6 与 python3.7 之间。 如果您在本地机器上运行 pip install,然后压缩依赖项,然后上传供 lambda 使用,这意味着某些二进制文件是使用您的 OS 编译器编译的,这与 lambda 运行时 os - amazonlinux 【参考方案1】:

这有点奇怪,但我对这个问题的解决方案是在 srsly 文件夹中创建一个附加的“ujson”文件夹,然后将所有 ujson 生成的代码移动到之前创建的文件夹“ujson”

【讨论】:

【参考方案2】:

对我来说,pip 卸载和安装 srsly 再次正常工作。有时它只是与您的 python 版本的兼容性问题,因此请确保存在正确的 python/srsly 版本

【讨论】:

以上是关于AWS Lambda -- 无法为 SpaCy 导入 srsly.ujson.ujson的主要内容,如果未能解决你的问题,请参考以下文章

AWS Lambda 错误:当 url 参数包含 JSON 数组时,“无法将请求正文解析为 json”

AWS Lambda 无法调用没有 VPC 的另一个 AWS Lambda - NodeJs

从 AWS API Gateway Web 界面配置 AWS Lambda 时无法选择/查看 Lambda 函数

无法从 AWS lambda 连接 AWS redshift

AWS 错误:代理集成无法配置为转换响应

aws cdk:无法删除 lambda 边缘