AWS Lambda -- 无法导入srsly.ujson.ujson用于SpaCy

4
我正在尝试将SpaCy作为Python Lambda的依赖项添加。我通过使用pip3 install spacy --no-deps -t .在名为dependencies的目录中单独安装SpaCy来实现这一点。这是因为我无法在Lambda的\tmp目录中加载整个Spacy依赖项。
我成功地将文件夹上传到s3并在Lambda调用期间下载它。当我尝试import spacy时,我会得到这个错误:[ERROR] Runtime.ImportModuleError: Unable to import module : No module named 'srsly.ujson.ujson'
我在dependencies\中手动安装了srsly,并且我拥有根据此链接列出的所有文件。这被此链接引用。其中一个回复说:“似乎Python无法加载它,因为它没有编译?”我如何编译具有.c文件的依赖项?
我在这个问题上找到了另一个问题,但我已经手动安装了srsly。我如何导入模块?谢谢。
我手动检查了我的代码,以确保在导入spacy之前存在ujson,方法如下:
if os.path.exists('/tmp/dependencies/srsly/ujson/ujson.c'):
    print('ujson exists')

打印语句将被输出。


2
你使用的spacy版本是什么?pip安装在哪里运行?我遇到了类似的问题,我认为问题在于我在我的机器上运行了pip安装,但lambda运行时使用aws linux和在我的机器上编译的C依赖项在那里不起作用。 - Alexey Smirnov
@AlexeySmirnov 我正在文件夹 /tmp/python 中运行 pip3 install spacy --no-deps -t . 命令。是的,我认为问题可能也与 python3.6 和 python3.7 有关。 - Nagarajan Shanmuganathan
1
如果您在本地计算机上运行pip install,然后压缩依赖项,再上传给lambda使用,这意味着某些二进制文件是使用您的操作系统编译器编译的,而该编译器与lambda运行时操作系统-amazonlinux不同。 - Alexey Smirnov
2个回答

1

对于我来说,使用pip卸载和重新安装srsly就可以正常工作。有时候这只是与您的Python版本兼容性问题,因此请确保正确的Python/srsly版本已经安装。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接