【发布时间】: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
标签: python amazon-web-services aws-lambda spacy ujson