1

私はGoogle のor-toolsAWS EC2 インスタンスを正常に使用していますが、最近 AWS Lambda 関数に含めることを検討していますが、実行できません。

関数debug.py

以下は、すべてが正しく設定されていれば成功するはずのpywrapcpfromをインポートする基本的な関数です。ortools

from ortools.constraint_solver import pywrapcp

def handler(event, context):
    print(pywrapcp)

if __name__ == '__main__':
    handler(None, None)

モジュールのインポートの失敗

zip アーカイブを作成する前に、 Amazon の指示に従ってすべての依存関係をプロジェクトにコピーするpackage.shスクリプトを作成しました。デプロイされたコードを実行すると、次のようになります。

Unable to import module 'debug': No module named ortools.constraint_solver

の内容package.sh

#!/bin/bash

DEST_DIR=$(dirname $(realpath -s $0));

echo "Copy all native libraries...";
mkdir -p ./lib && find $directory -type f -name "*.so" | xargs cp -t ./lib;

echo "Create package...";
zip -r dist.zip debug.py lib;
rm -r ./lib;

echo "Add dependencies from $VIRTUAL_ENV to $DEST_DIR/dist.zip";

cd $VIRTUAL_ENV/lib/python2.7/site-packages;
zip -ur $DEST_DIR/dist.zip ./** -x;

ortoolsフォルダーをortools-4.4.3842-py2.7-linux-x86_64.eggプロジェクト ルートに直接コピーすると、それが見つかりortoolsますが、インポートpywrapcpに失敗します。これは、ネイティブ ライブラリの読み込みの失敗に関連している可能性がありますが、ログに詳細が表示されないため、わかりません。

Unable to import module 'debug': cannot import name pywrapcp

何か案は?

4

2 に答える 2

0

まず、基盤となる AWS Lambda 実行環境は Amazon Linux ですが、or-tools はhttps://github.com/google/or-toolsに従って以下の環境以外ではテストされていません。

  • Ubuntu 14.04 および 16.04 アップ (64 ビット)。
  • Xcode 7.x (64 ビット) を搭載した Mac OS X El Capitan。
  • Microsoft Windows と Visual Studio 2013 および 2015 (64 ビット)

ここのリストで aws lambda が使用する ami の 1 つを使用してインスタンスを起動して、コードをテストします ( http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html ) 。

動作する場合は、pip を使用して依存関係/ライブラリをプロジェクト ディレクトリのルート レベルにインストールしてから、zip します。ライブラリを手動でプロジェクト ディレクトリにコピーしないでください

于 2016-10-19T17:03:43.890 に答える