1

、、などのバイナリ依存関係を持つ複数のライブラリを使用するLambda関数があります。過去に、 でそれらを正常にコンパイルして にデプロイしました。PythonnumpyscipyPillowAmazon LinuxLambda

ただし、最近、依存関係の山に追加Grequestしましたが、直接関連していないように見えるエラーがスローされていGrequestます。このトピックに関する他の質問は行き止まりに終わったので、リングに私の帽子を置きます.

最初のエラーは、単純なエラーGrequests requires geventまたは類似のエラーでした。これを解決するためpip install gevent --no-binary :all:に、Amazon Linuxインスタンスで実行してみました。それをコードにバンドルして、Lambda にアップロードしました。これはエラーに影響しませんでした。

src次に、レポからダウンロードしてgeventコンパイルしmakeました (レポの README のコマンドは、記録していないエラーをスローしました)。これによりファイルが生成されegg、それをファイルに変換してwhl実行しましpip install gevent.whl -t .た。

結果のコードを my にバンドルしてlambda.zipアップロードしました。これにより、新しいエラーが発生しました: module initialization error: lib/libptf77blas.a.gz: invalid ELF header

libptf77blas.a.gzlibmy のフォルダー内のファイルですlambda.zip。このフォルダには、、、 などを組み立てながら AWS Linux で構築したファイル.soがいくつか含まれています。.anumpyscipyPillow

私の知る限り、これはnumpy. 私が理解していない部分は次のとおりです。私の関数が使用されていますnumpy(おそらくlibptf77blas.a.gzgrequests.

したがって、コンパイルに関する何かが他の依存ライブラリgeventの依存関係を壊したか、それ自体が必要であり、それが見つけたものに混乱していると思います。binarygeventlibptf77blas.a.gz

私はファイルに依存して実行しましたが、参照されていませlddん。しかし、私はコンパイルの初心者なので、それはほとんど決定的ではありません..sogeventlibptf77blas.a.gz

並列アップロードを有効にしたいのGrequestsですが、これを修正する方法、または使用する代替ライブラリが不明です (通常は JS を作成するため、Python は第 2 言語です)。

4

2 に答える 2

3

問題はまったく無関係な問題からの愚かなユーザーエラーでした.OPの手順に従ってください.

grequests または、私が github に投稿したのコピーを使用してください。、zip、およびAmazon Linux インスタンスでコンパイルされたものですgrequests。それは私のうまくいきます。geventgreenletLambda Function

于 2016-12-28T00:37:49.347 に答える
0

の質問が述べているように、 libevなどのバイナリがAmazon Linux Imageを使用してコンパイルされていることを確認する必要があります。基本的に、コンパイルが必要な C コードを使用するため、Amazon Linuxを実行しているマシンに numpy や Grequests などをインストールする必要があります。

その質問のチュートリアル リンクは、ソースから構築するのに非常に適しているように見えますが、これに必要なものよりも少し多くなります。

バイナリのコンパイルに慣れていない場合は、 make について少し読んで、curl のビルドなどの例を見てください。Amazon Linux を使用しているため、yum を使用しており、CentOS に非常に似ています。

CentOS の docker イメージの venv に numpy と Grequests をインストールし、チュートリアルと同様にコンテンツを圧縮することで解決できるかもしれませんが、最初に、Amazon のイメージを使用して EC2 インスタンスを起動し、ものをインストールします。チュートリアルのようにそこにあります。

于 2016-12-27T21:35:02.443 に答える