2017-08-03 51 views
1

背景獲取PIL /枕頭4.2.1正確上傳到AWS LAMBDA Py3.6

我一直在努力,在過去幾天部署使用枕頭拉姆達,我使用Python 3.6部署。值得注意的是,我正在開發Windows 10環境。

第一次嘗試

我開始有點子做嚴格的安裝我的包在我的工作區中的以下內容:

pip3 install pillow -t "D:\Work and Projects\...\...\<projectdir>\pillow" 

我還有其他的包,並試圖在同一莊園安裝包,其中一個具體是praw,我是這麼做的:

pip3 install praw -t "D:\Work and Projects\...\...\<projectdir>\praw" 

zipp荷蘭國際集團我的項目的內容一起,我上傳了我的包達Lambda和在我的第一次測試,我收到了錯誤:

Unable to import module 'motw_lambda': cannot import name '_imaging'

我然後取出枕頭包,企圖看到這個問題是從詞幹(枕頭或大蝦或其他包裹之一)。隨着枕頭被移除,執行成功。然後我在包裝中取出的pillow包和嘗試:

pip3 install pillow -t "D:\Work and Projects\...\...\<projectdir>\PIL" 

pip3 install pillow -t "D:\Work and Projects\...\...\<projectdir>\Pillow" 

,但得到與包'_imaging'同樣的錯誤。

進一步嘗試

我再接着每this resourcethis方向。我也嘗試使用virualenv甚至lambda-uploader

奇怪的是,我得到了同樣的錯誤!我都在這裏的選擇,感覺要麼我正在做一些愚蠢的事情,或者說這是不可能在Lambda-Python3.6目前(雖然我不能成爲其他人還沒有在py3中使用過的枕頭.6-lambda尚未...)

任何信息,幫助或通用資源,將不勝感激!

+0

您可以發佈完整回溯?什麼是試圖導入'_imaging'和從哪裏?試圖導入時出現什麼錯誤?你能夠成功導入praw?這可能是任何數量的問題,動態鏈接失敗,pythonpath等...您需要提供更多信息。 fwiw,考慮到你在windows上,並且lambda可能使用linux的風格,你的枕頭二進制文件可能是爲windows編譯的,並且不能在linux中運行。 – khazhyk

+0

玩這個猜測,https://stackoverflow.com/問題/ 8614261/cross-compiling-python-extensions提供了一些關於如何從windows交叉編譯linux的提示 – khazhyk

+0

@khazhyk,我引用的其中的錯誤*就是整個堆棧跟蹤。另外,感謝您的鏈接,我會看看! –

回答

1

基本上,您必須使用Docker或甚至更好的EC2實例編譯庫(例如PIL)。

  1. 啓動這樣的一個碼頭工人的容器:docker run --rm -it -v "%cd%:/code" lambci/lambda:build-python3.6 sh

  2. 裏面就有,導航到/代碼目錄(cd /code),創建的virtualenv(virtualenv env),激活它(source env/bin/activate),最後,請安裝圖書館(pip install pillow)。

  3. 一旦你安裝了你的庫,你可以退出容器。這裏的祕密是將你的包庫移動到根文件夾(你的主.py文件所在的位置)。例如,將文件夾env/lib/python3.6/site-packages/PIL移動到根目錄。

然後,用你的.py文件一起壓縮您的PIL文件夾,你定!

我只是做了它,記錄它在這裏充分:http://diegojancic.blogspot.com/2017/11/deploying-pilpillow-to-aws-lambda.html

+1

自從我問了這個問題已經有一段時間了,但我不可避免地搞了一個EC2實例,PIP -t將它安裝在實例上,壓縮了它,然後SCP將它移到了我的Windows機器上。從那裏我解壓縮,放入我的項目目錄,並做了最後的壓縮包。所有作品雖然繁瑣。謝謝! –

+0

是的,我想通了。我想把它留在這裏供其他人蔘考。謝謝! –