2017-01-06 8 views
0

Я пытаюсь использовать библиотеку проверки орфографии 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 часов, пытаясь выяснить, как это сделать. Заранее спасибо за вашу помощь.

ответ

0

Ну, для тех, кто сталкивается с этой проблемой (которая, вероятно, будет некой ...), оказалось, что использовать этот пакет на Лямбде невозможно. Что-то связано с отсутствием необходимой инфраструктуры для загрузки ресурсов общих объектов на несколько уровней. В конце концов, я просто использовал флеш-сервер на EC2, и он работал нормально.

 Смежные вопросы

  • Нет связанных вопросов^_^