簡體   English   中英

如何在AWS Lambda上使用Grequests?

[英]How do I use Grequests on AWS Lambda?

我在Python中有一個Lambda函數,該函數使用幾個具有二進制依賴性的庫: numpyscipyPillow等。過去,我已經在Amazon Linux上成功編譯了它們並將其部署到Lambda

不過,我最近將Grequest添加到了一堆依賴項中,並且它拋出的錯誤似乎與Grequest 關於這個話題的其他問題導致了死胡同,所以我把帽子戴上了。

第一個錯誤是簡單的Grequests requires gevent或類似的東西。 為了解決這個問題,我嘗試在Amazon Linux實例上運行pip install gevent --no-binary :all:將其與我的代碼捆綁在一起並上傳到Lambda。 這對錯誤沒有影響。

然后,我gevent下載src並使用make對其進行了編譯(存儲庫README中的命令引發了我未記錄的錯誤)。 這產生了一個egg文件,我將其轉換為whl文件並運行pip install gevent.whl -t .

我將生成的代碼與lambda.zip捆綁在一起並上傳了。 這導致了一個新錯誤module initialization error: lib/libptf77blas.a.gz: invalid ELF header

libptf77blas.a.gz是我的lambda.zip中的lib文件夾中的文件。 此文件夾包含幾個.so.a文件,這些文件是我在組裝numpyscipyPillow等時在AWS Linux上構建的。

據我所知,這是numpy的依賴項。 我不明白的部分是:我的函數使用numpy (大概libptf77blas.a.gz在添加grequests之前就grequests

因此,我假設有關編譯gevent打破了我其他與binary相關的lib的依賴關系,或者gevent本身需要libptf77blas.a.gz並對其發現的內容感到困惑。

我在gevent依賴的.so文件上運行了ldd ,但沒有一個引用libptf77blas.a.gz 但是,我是一位正在編譯的新手,所以這幾乎沒有定論。

我想實現Grequests啟用的並行上載,但尚不清楚如何解決此問題,或不清楚要使用哪個替代庫(我通常寫JS,因此Python是第二語言)。

問題完全是與無關的用戶造成的愚蠢用戶錯誤-按照OP中的步驟操作,您應該會很好。

或者只是使用我在github上發布grequests的副本。 這是一個zip其中grequests在Amazon Linux實例上編譯的grequestsgeventgreenlet 它可以在我的Lambda Function正常工作。

正如其他問題所述,您需要確保使用Amazon Linux Image編譯libev等二進制文件。 基本上,您需要在運行Amazon Linux的計算機上安裝numpy和Grequests之類的東西,因為它們使用需要編譯的C代碼。

該問題中的教程鏈接對於從源代碼構建事物看起來非常不錯,盡管比您需要的更多。

如果您不熟悉編譯二進制文件,則應閱讀一些有關make的知識,並查看一些示例,例如構建curl 由於您使用的是Amazon Linux,因此它使用yum,並且與CentOS非常相似。

也許可以通過在CentOS的docker映像上的venv上的venv中安裝numpy和Grequests並將其內容壓縮成類似於本教程的方式來擺脫,但是我首先要使用Amazon的映像啟動EC2實例並安裝東西就像本教程一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM