5

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

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

但是,pyenchant 库在 Lambda 上运行时无法加载它需要工作的任何单词词典。然后我在 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 个小时的大部分时间试图弄清楚如何让它工作。在此先感谢您的帮助。

4

1 回答 1

0

好吧,对于遇到这个问题的任何其他人(可能没有人......)结果证明不可能在 Lambda 上使用这个包。这与没有正确的基础架构来加载多个级别的共享对象资源有关。最后,我只是在 EC2 上使用了一个烧瓶网络服务器,它运行良好。

于 2017-06-06T10:11:27.220 回答