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

2024-10-02 10:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在运行在Lambda上的python代码中,我能够成功地导入enchant库并编译了C库(利宾泽。所以)并将输出复制到Lambda部署包中。在

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

yum install aspell-en enchant-aspell

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

  • 在利伯斯佩尔.so在
  • 利宾泽_阿斯佩尔.so在
  • 利宾泽_ispell.so公司在
  • 利宾泽_我的佩尔在
  • 在利宾泽。所以在

我很确定利宾泽_阿斯佩尔.so是一本真正的字典,但它没有捡起来,我也不知道下一步该去哪里。在

下面是我的lambda_处理程序python代码:

^{pr2}$

下面是调用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个小时的大部分时间试图找出如何让这个工作。提前谢谢你的帮助。在


Tags: lambdainpyselftasksoinitvar
1条回答
网友
1楼 · 发布于 2024-10-02 10:33:31

好吧,对于其他遇到这个问题的人(可能没有人……)来说,在Lambda上使用这个包是不可能的。这与没有正确的基础设施来加载多个级别的共享对象资源有关。最后,我在EC2上使用了一个flask web服务器,它工作得很好。在

相关问题 更多 >

    热门问题