2016-03-27 107 views
7

我正在運行帶有Python 2.7運行時的AWS Lambda腳本。然而,每當它初始化開始導入grequests庫,但失敗,因爲它是在GEVENT依賴性:無法爲AWS Lambda導入grequests

Gevent is required for grequests.

看來它成功找到grequests庫(因爲它知道它需要GEVENT),但失敗。

我試過到目前爲止:

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

然後我壓縮目錄的內容,並上傳到每AWS這裏的說明:http://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html

看來不管我嘗試Lambda無法找到gevent,但它能夠找到其他非默認庫沒有問題。

+0

你在哪裏打電話'pip install'?在你的lambda腳本中? – helloV

+0

我會將其添加到原始文章中,但是我從終端調用此文件,並按照以下說明將內容上傳到AWS:http://docs.aws.amazon.com/lambda/latest/dg/ lambda-python-how-to-create-deployment-package.html –

回答

2

我必須在Amazon Linux實例上從src構建gevent。如果有人需要它們,我把結果文件放在zip - 只需將它們包含在你上傳的Lambda zip中,你應該像老闆一樣併發。

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

+0

看來我的問題是試圖在亞馬遜Linux上編譯整個grequests,這個問題已經遇到了一個無關緊要的問題。只編譯'gevent'作品。謝謝! –

3

由於Gevent基於libev,它很可能在通過pip安裝時編譯二進制文件。

如果您希望它們在AWS Lambda中可執行,則需要確保您正在部署爲Amazon Linux編譯的二進制文件。您可以通過在運行Amazon Linux的EC2實例上構建部署包來實現此目的。

還檢出this answerthis tutorial

+0

謝謝你。我確實嘗試了做這個工作,把一個EC2實例打開並安裝在那裏,然後把結果包含在我的repo中。但是,我有同樣的問題。 –

+0

在EC2上運行代碼時,你有同樣的問題嗎?如果是的話,我會建議在那裏調試問題,因爲它的行爲應該和Lambda一樣。直接在Lambda中調試這樣的東西是一個真正的痛苦。 – birnbaum

+0

有趣的是,這也是讓lxml庫在Lambda上運行的解決方案。所以如果有人在搜索,只需在服務器上編譯即可。 –

相關問題