gpt4 book ai didi

python - 在 AWS Lambda 上使用 Pyenchant,可以加载包但不能加载提供者字典,从 EC2 上的源代码编译并提取 .so 文件

转载 作者:行者123 更新时间:2023-11-28 19:10:11 24 4
gpt4 key购买 nike

我正在尝试在 AWS 上的 Lambda 函数中使用 Python 拼写检查库 Pyenchant。 Pyenchant 是 C libenchant 库的包装器,它又依赖于 Aspell 等提供商提供的单词词典。

在我在 Lambda 上运行的 python 代码中,我能够在 AWS linux EC2 实例上成功导入已编译的 enchant 库和 C 库 (libenchant.so),并将输出复制到我的 Lambda 部署包。

但是,当在 Lambda 上运行时,pyenchant 库无法加载它需要工作的任何单词词典。然后,我使用以下方法在 EC2 实例上安装了 Aspell:

yum install aspell-en enchant-aspell

然后我将以下额外的 .so 文件复制到我的部署包的/lib 文件夹中:

  • libaspell.so
  • libenchant_aspell.so
  • libenchant_ispell.so
  • libenchant_myspell.so
  • libenchant.so

我很确定 libenchant_aspell.so 是实际的字典,但它没有提取它,我不知道下一步该去哪里。

下面是我的 lambda_handler python 代码:

from __future__ import print_function
import os
import sys
import re
import enchant

enchant.set_param("enchant.aspell.dictionary.path","/var/task/lib")

def lambda_handler(event, context):

print("# List available enchant dictionary languages")
print(enchant.list_languages())
b = enchant.Broker()
print("# List available enchant brokers")
print(b.describe())
d = enchant.Dict("en_GB")
# print(d.provider.name)
# print(d.provider.file)
return "Done"

这是调用 Lambda 函数的输出:

START RequestId: 7539245b-d3d6-11e6-b7e6-edc1dc8cbdd4 Version: $LATEST
# List available enchant dictionary languages
[]
# List available enchant brokers
[]
Dictionary for language 'en_GB' could not be found: DictNotFoundError
Traceback (most recent call last):
File "/var/task/package_test.py", line 16, in lambda_handler
d = enchant.Dict("en_GB")
File "/var/task/enchant/__init__.py", line 558, in __init__
_EnchantObject.__init__(self)
File "/var/task/enchant/__init__.py", line 168, in __init__
self._init_this()
File "/var/task/enchant/__init__.py", line 565, in _init_this
this = self._broker._request_dict_data(self.tag)
File "/var/task/enchant/__init__.py", line 310, in _request_dict_data
self._raise_error(eStr % (tag,),DictNotFoundError)
File "/var/task/enchant/__init__.py", line 258, in _raise_error
raise eclass(default)
DictNotFoundError: Dictionary for language 'en_GB' could not be found

END RequestId: 7539245b-d3d6-11e6-b7e6-edc1dc8cbdd4
REPORT RequestId: 7539245b-d3d6-11e6-b7e6-edc1dc8cbdd4 Duration: 1.03 ms Billed Duration: 100 ms Memory Size: 256 MB Max Memory Used: 16 MB

如您所见,import enchant 工作正常,但找不到任何字典文件。

我真的坚持这个,花了 6 个小时的大部分时间试图弄清楚如何让它工作。在此先感谢您的帮助。

最佳答案

好吧,对于遇到此问题的任何其他人(可能没有人...),事实证明无法在 Lambda 上使用此程序包。与没有正确的基础设施来加载多个层次的共享对象资源有关。最后,我只是在 EC2 上使用了一个 Flask Web 服务器,它运行良好。

关于python - 在 AWS Lambda 上使用 Pyenchant,可以加载包但不能加载提供者字典,从 EC2 上的源代码编译并提取 .so 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41500160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com