2016-03-27 37 views
7

Używam skryptu AWS Lambda ze środowiskiem wykonawczym Python 2.7. Jednak, gdy inicjuje zaczyna importować bibliotekę grequests ale nie ze względu na jego zależność od gevent:Nie można importować wywołań dla AWS Lambda

Gevent is required for grequests.

Wydaje się, że jest z powodzeniem znaleźć bibliotekę grequests (ponieważ wie, że potrzebuje gevent), ale nie powiedzie się.

Co próbowałem dotąd:

pip install --ignore-installed grequests -t .

pip install --ignore-installed grequests -t ./lib

pip install --ignore-installed gevent -t .

pip install --ignore-installed gevent -t ./lib

A potem skompresować zawartość katalogu i przesłać do AWS na instrukcje tutaj: http://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html

Wygląda na to, że niezależnie od tego, co próbuję, Lambda nie może zlokalizować gevent, ale może znaleźć inne, niewymagające żadnych problemów, biblioteki.

+0

Gdzie nazywasz 'instalacja pip'? W twoim scenariuszu lambda? – helloV

+0

Dodam to do oryginalnego wpisu, ale dzwonię do niego z terminalu i zapakowuję zawartość do przesłania do AWS, postępując zgodnie z tymi instrukcjami: http://docs.aws.amazon.com/lambda/latest/dg/ lambda-python-how-to-create-deployment-package.html –

Odpowiedz

2

Musiałem zbudować gevent z src na instancji Amazon Linux. Umieszczam pliki wynikowe w zip, jeśli ktoś ich potrzebuje - po prostu dołącz je do przesłanej Lambdy zip i powinieneś być w trakcie pracy jak szef.

https://github.com/brandonmp/aws-lambda-grequests

+0

Wygląda na to, że mój problem polegał na próbie skompilowania całych wywołań w Amazon Linuksie, które działały w niezwiązanym z tym problemem. Właśnie kompilacja 'gevent' działa. Dzięki! –

3

Ponieważ Gevent jest oparty na libev, najprawdopodobniej będzie kompilował pliki binarne podczas instalacji przez pip.

Musisz upewnić się, że instalujesz pliki binarne skompilowane dla systemu Amazon Linux, jeśli chcesz, aby były wykonywane w AWS Lambda. Możesz to zrobić, budując pakiet deploy na instancji EC2, która działa w systemie Amazon Linux.

Sprawdź również this answer i this tutorial.

+0

Dzięki za to. Próbowałem wykonać tę pracę, kręcąc instancję EC2 i instalując ją, a następnie włączając wynik do mojego repozytorium. Mam jednak ten sam problem. –

+0

Czy masz ten sam problem podczas uruchamiania kodu w EC2? Jeśli tak, zaleciłbym debugowanie problemu, ponieważ powinien on zachowywać się tak samo jak w Lambda. Debugowanie takich rzeczy bezpośrednio w Lambda to prawdziwy ból. – birnbaum

+0

To również jest dobre rozwiązanie, które pozwala uruchomić bibliotekę 'lxml' na serwerze Lambda. Więc jeśli ktoś szuka, po prostu skompiluj na serwerze. –