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 函数