Я пытаюсь использовать библиотеку проверки орфографии Python в функции Lambda на AWS. Pyenchant - это обертка для библиотеки C libenchant, которая, в свою очередь, полагается на словарные словари от таких поставщиков, как Aspell.Использование Pyenchant на AWS Lambda, может загружать пакеты, но не словари поставщика, скомпилированы из источника на EC2 и извлечены .so файлы
В моем коде на Python, запущенном на Lambda Я могу успешно импортировать библиотеку enchant, скомпилировав ее и библиотеки C (libenchant.so) на экземпляр AWS linux EC2 и скопировав выходы в мой пакет развертывания Lambda.
Однако библиотека pyenchant не может загрузить ни один из словарей словаря при работе на лямбда, что она должна работать. Затем я установил Aspell на экземпляре EC2 с помощью:
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 код питона:
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 часов, пытаясь выяснить, как это сделать. Заранее спасибо за вашу помощь.