2017-01-06 1 views
0

AWS의 Lambda 함수에서 Python 맞춤법 검사 라이브러리 Pyenchant를 사용하려고합니다. Pyenchant는 Aspell과 같은 제공 업체의 단어 사전에 의존하는 C libenchant 라이브러리의 래퍼입니다.AWS Lambda에서 Pyenchant를 사용하여 패키지를로드 할 수 있지만 공급자 사전은로드 할 수 없으며 EC2에서 소스에서 컴파일하고 .so 파일을 추출 할 수 있습니다.

람다에서 실행되는 Python 코드에서 AWS Linux EC2 인스턴스에 C 라이브러리 (libenchant.so)를 컴파일하고 Lambda 배포 패키지에 출력을 복사하는 데 성공한 마법 라이브러리를 성공적으로 가져올 수 있습니다.

그러나 pyenchant 라이브러리는 작동해야하는 Lambda에서 실행할 때 단어 사전을로드 할 수 없습니다.

yum install aspell-en enchant-aspell 

내가 다음 내 배포 패키지의/lib 폴더에 다음과 같은 추가하는 .so 파일을 복사 :

  • 을 libenchant_aspell.so
  • libaspell.so 그때 사용하여 EC2 인스턴스에 Aspell을 설치
  • 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" 

그리고 여기에 람다 함수 호출의 출력입니다 : 당신이 import enchant 작품을 잘 볼 수 있지만,이 중 하나를 찾을 수 없기 때문에

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 

을 사전 파일.

저는이 문제에 정말로 매달렸습니다. 6 시간 동안이 작업을 수행하는 방법을 알아 내려고 노력했습니다. 귀하의 도움에 미리 감사드립니다.

답변

0

글쎄,이 문제 (아마 아무도 없을 것입니다 ...)를 만나는 다른 사람들을 위해,이 패키지를 람다에서 사용할 수 없다는 것이 밝혀졌습니다. 공유 객체 리소스를 여러 수준으로로드 할 수있는 적절한 인프라가없는 것과 관련이 있습니다. 결국 EC2에서 플라스크 웹 서버를 사용했는데 제대로 작동했습니다.

관련 문제