2017-07-19 8 views
2

私はPythonを使用してAWSラムダ関数を作成しようとしています。インライン関数の代わりにzipデプロイメントパッケージを作成し、それをAWS環境にアップロードする必要があります。私のソースコードはtest.pyファイルと他の依存関係、例えばnumpy、sklearnなどがソースコードと同じフォルダにあります。AWSラムダビルド外部依存ライブラリをPythonで

ラムダ機能をテストするとエラーが発生します。

モジュール '試験' をインポートすることができません: という名前のモジュールのsklearn .__ check_build._check_build「 ___________________________________________________________________________の/ var /タスク/ sklearn/__ check_buildの内容:setup.py
__pycache__ _check_build.cp36-win_amd64を.pyd __init__.py ___________________________________________________________________________ scikit-learnが正しく構築されていないようです。ソースから scikit-learnをインストールしている場合は、 パッケージを使用する前にビルドすることを忘れないでください。python setup.py installまたはmakeを ソースディレクトリに実行してください。インストーラを使用している場合は、 がPythonバージョン、オペレーティングシステム、 プラットフォームに適していることを確認してください。

は、ここで私は私のソースコードにnumpyのをインポートする場合、私は同様の問題に直面しています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 

に存在する私のpythonのソースコードです。 (マルチアレイをインポートできません)

pip install numpy/scikit-learn -t /path/to/mydir/を使用してすべてのライブラリをインストールしています。

Here is the folder structure after I use pip install commands

親切に私は問題を解決するのに役立ちます。ありがとう!!

+0

[AWSラムダでScikit-Learnを使用する] – darthsidious

答えて

1

可能性の高い2つの問題がここにありますCバインディングは、ラムダ関数が実行と同じアーキテクチャを持つマシン上で(pip install)を構築する必要がある必要があり

  1. Pythonパッケージ(つまり、Linuxの)
  2. は、
  3. 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行きます。 handler.pyの上部に

pip install -t lib numpy 

、私は常にこれらの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 docker image 。 zipファイルを保存してWindowsマシンで表示するにはどうすればよいですか? – Regressor

+0

'-v'引数に関する私の注意を見てください。 Windows用のDockerドキュメントを参照する必要があるかもしれません。 https://docs.docker.com/engine/tutorials/dockervolumes/ – brianz

+0

'pip install -t lib numpyなどを実行するたびに正しい.soファイルが得られます - > これはちょうど真実ではありません – Jeremy

関連する問題