2016-03-27 22 views
7

Tôi đang chạy tập lệnh AWS Lambda với thời gian chạy là Python 2.7. Tuy nhiên, bất cứ khi nào nó khởi nó bắt đầu phải nhập khẩu các thư viện grequests nhưng không thành công vì nó phụ thuộc vào gevent:Không thể nhập grequests cho AWS Lambda

Gevent is required for grequests.

Dường như nó đang tìm kiếm thành công thư viện grequests (vì nó biết nó cần gevent) nhưng thất bại.

Những gì tôi đã cố gắng cho đến nay:

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

Và sau đó tôi nén nội dung của các thư mục và tải lên AWS mỗi hướng dẫn tại đây: http://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html

Có vẻ như không có vấn đề gì tôi thử Lambda là không thể xác định vị trí gevent, nhưng nó có thể tìm thấy các thư viện không mặc định khác không có vấn đề.

+0

Bạn gọi 'pip install' ở đâu? Trong kịch bản lambda của bạn? – helloV

+0

Tôi sẽ thêm điều này vào bài đăng gốc, nhưng tôi gọi điều này từ thiết bị đầu cuối và nén nội dung để tải lên AWS theo các hướng dẫn sau: http://docs.aws.amazon.com/lambda/latest/dg/ lambda-python-how-to-create-deployment-package.html –

Trả lời

2

Tôi phải xây dựng gevent từ src trên phiên bản Amazon Linux. Tôi đặt các tập tin kết quả trong một zip nếu có ai cần chúng - chỉ cần bao gồm chúng trong Lambda zip đã tải lên của bạn và bạn nên đồng thời giống như một ông chủ.

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

+0

Có vẻ như vấn đề của tôi đã cố gắng biên dịch toàn bộ yêu cầu trên Amazon Linux đang gặp sự cố không liên quan. Chỉ cần biên dịch 'gevent' hoạt động. Cảm ơn! –

3

Vì Gevent dựa trên libev, rất có khả năng biên dịch các tệp nhị phân khi được cài đặt qua pip.

Bạn cần đảm bảo rằng bạn đang triển khai các tệp nhị phân được biên dịch cho Amazon Linux nếu bạn muốn chúng được thực thi trong AWS Lambda. Bạn có thể làm như vậy bằng cách xây dựng gói triển khai của bạn trên một cá thể EC2 đang chạy Amazon Linux.

Ngoài ra, hãy xem this answerthis tutorial.

+0

Cảm ơn vì điều này. Tôi đã cố gắng làm cho công việc này bằng cách quay lên một ví dụ EC2 và cài đặt ở đó và sau đó bao gồm các kết quả trong repo của tôi. Tuy nhiên, tôi có cùng một vấn đề. –

+0

Bạn có gặp vấn đề tương tự khi chạy mã trên EC2 không? Nếu có, tôi sẽ khuyên bạn nên gỡ lỗi vấn đề ở đó, bởi vì nó sẽ hành xử giống như trong Lambda. Gỡ lỗi các công cụ như thế này trực tiếp trong Lambda là một nỗi đau thực sự. – birnbaum

+0

Thực tế thú vị, đây cũng là giải pháp để nhận thư viện 'lxml' chạy trên Lambda. Vì vậy, nếu có ai đang tìm kiếm, chỉ cần biên dịch trên máy chủ. –

Các vấn đề liên quan