2017-07-19 122 views
2

我正在嘗試使用Python創建AWS lambda函數。而不是內聯函數,我想創建一個zip部署包,然後將其上載到我的AWS環境中。我有我的源代碼在test.py文件和其他依賴關係,如numpy,sklearn等在與我的源代碼是相同的文件夾中。AWS lambda構建python中的外部依賴庫

我在測試我的lambda函數時遇到錯誤。

無法導入模塊 '測試':無模塊名爲 'sklearn .__ check_build._check_build' ___________________________________________________________________________的/ var /任務的內容/ sklearn/__ check_build:setup.py
__pycache__ _check_build.cp36,win_amd64 .pyd __init__.py ___________________________________________________________________________似乎scikit-learn沒有被正確構建。如果你有從源安裝的scikit- ,請不要忘記在使用它之前建立 包:運行python setup.py installmake在 的源目錄中。如果您使用的是安裝程序,請檢查它是否適合您的Python版本,您的操作系統和您的平臺 。

這裏是駐留在test.py

from sklearn.model_selection import train_test_split 
print('Loading function') 


def lambda_handler(event, context): 
    #print("Received event: " + json.dumps(event, indent=2)) 
    print("value1 is " + event['key1']) 
    print("value2 is " + event['key2']) 
    print("value3 is " + event['key3']) 
    return event 

我面臨着類似的問題,如果我在我的源代碼導入numpy的我的Python源代碼。 (不能導入多陣列)

我正在使用pip install numpy/scikit-learn -t /path/to/mydir/安裝每個庫。

Here is the folder structure after I use pip install commands

請幫我解決這個問題。謝謝 !!

+0

[使用Scikit學習AWS Lambda](https://serverlesscode.com/post/deploy-scikitlearn-on-lamba) – darthsidious

回答

1

這裏有可能兩個問題:

  1. Python包具有C綁定需要構建(pip install)的計算機上使用相同的架構,因爲這其中lambda函數運行(即Linux的)
  2. 使用AWS Lambda,您負責管理Python的路徑,以便它可以找到您的依賴關係。您可能需要在運行時更新路徑。

爲了解決#1問題,我使用了官方的Python Docker鏡像。

docker run --rm -it \ 
     -v `pwd`:/code \ 
     python:2 bash 

現在,每當你做一個pip install -t lib numpy或類似的,你會得到正確的.so文件。這裏的技巧是使用卷參數(-v),以便關閉容器時沿lib目錄保存在主機上。

爲了解決2,我總是構建我的無服務器/λ的項目是這樣的:

$ tree -L 2 
. 
├── handler.py 
├── lib 
│   └── numpy 
└── serverless.yml 

也就是說,我所有的依賴關係裏面去lib

pip install -t lib numpy 

截至handler.py頂部,我總是有這4條線路:

import os 
import sys 

CWD = os.path.dirname(os.path.realpath(__file__)) 
sys.path.insert(0, os.path.join(CWD, "lib")) 

# now it's ok to import extra libraries 
import numpy as np 

sys.path.insert之後,任何進口你的包會工作。

+0

我正在嘗試使用解決方案1.我有我的庫建立在Python泊塢窗圖像。如何保存壓縮文件並在我的Windows機器上查看它們? – Regressor

+0

查看我關於'-v'參數的說明。您可能需要參考Windows的Docker文檔。 https://docs.docker.com/engine/tutorials/dockervolumes/ – brianz

+0

'每當你做一個pip安裝-t lib numpy之類的,你就會得到正確的.so文件 - > 這只是不正確 – Jeremy