Numpy: AWSLambda関数にnumpyをインポートできません

作成日 2019年05月04日  ·  14コメント  ·  ソース: numpy/numpy

  • Pythonのインストール方法
    Macでpython3を削除してから、 brew install pythonを削除してpython3.7.3をインストールしました
  • numpyのインストール方法
    AWS Lambdaで実行するためにインストールしているので、 pip install numpy --target .
  • オペレーティングシステム
    macOS Sierra 10.12.6
  • Pythonの複数のバージョンがインストールされているかどうか
    ネイティブのPython2.7.10はまだ私のMacにインストールされています
  • ソースからビルドした場合は、コンパイラのバージョン、理想的にはビルドログ
    該当なし

したがって、コードをローカルで実行でき、問題はありません。 私はpandas、matplotlib、boto3、およびmpld3であり、mpld3がhtmlに変換するmatplotlibグラフを使用してAWSDDBテーブルのデータを整理および表示します。 https://docs.aws.amazon.com/lambda/latest/dg/lambdaによると、パンダにはnumpyが必要なようです。これらのライブラリをターゲットディレクトリにインストールして、ラムダ関数で実行できるようにしようとすると、

「重要:この問題を解決する方法についてのアドバイスは、こちらをお読みください。

マルチアレイnumpy拡張モジュールのインポートに失敗しました。 多くの
失敗したnumpyのビルドをインポートしようとしている可能性があります。
続行する方法は次のとおりです。

  • numpy gitリポジトリを使用している場合は、 git clean -xdfを試してください
    (バージョン管理されていないすべてのファイルを削除します)そしてnumpyを再構築します。
  • インストールしたnumpyバージョンを使用しようとしているだけの場合:
    インストールが壊れています-numpyを再インストールしてください。
  • すでに再インストールしても問題が解決しない場合は、次のようにします。

    1. 期待するPythonを使用していることを確認してください(/var/lang/bin/python3.6を使用しています)。

      また、PATHまたはPYTHONPATHに次のようなディレクトリがないこと

      使用しようとしているPythonとnumpyのバージョンに干渉します。

    2. (1)が正常に見える場合は、次のURLで新しい問題を開くことができます。

      https://github.com/numpy/numpy/issues。 詳細を含めてください:



      • Pythonのインストール方法


      • numpyのインストール方法


      • オペレーティングシステム


      • Pythonの複数のバージョンがインストールされているかどうか


      • ソースからビルドした場合は、コンパイラのバージョン、理想的にはビルドログ



 Note: this error has many possible causes, so please don't comment on
 an existing issue about this - open a new one instead.

元のエラーは次のとおりです:「numpy.core._multiarray_umath」という名前のモジュールはありません

END RequestId:2fc65f50-420d-441b-930c-665b1c8ab3ea
レポートRequestId:2fc65f50-420d-441b-930c-665b1c8ab3ea期間:0.85ミリ秒請求期間:100ミリ秒メモリサイズ:128 MB最大使用メモリ:40 MB `` `

最も参考になるコメント

そのAWSガイドはあなたに全体の話をしているわけではありません。 Amazon Linuxディストリビューションは、PyPiやconda-forgeなどの通常のNumPyインストールと互換性がありません。

これらのガイドのいずれかに従うか、次のいずれかのリポジトリのzipファイルを使用することをお勧めします。
https://medium.com/@samme/setting -up-python-3-6-aws-lambda-deployment-package-with-numpy-scipy-pillow-and-scikit-image-de488b2afca6
https://medium.com/@korniichuk/lambda -with-pandas-fd81aa2ff25e
https://blog.orikami.nl/building-scipy-pandas-and-numpy-for-aws-lambda-python-3-6-cba9355b44e9
https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy
https://github.com/vitolimandibhrata/aws-lambda-numpy

これはNumPyのバグではないので、問題を解決します。

全てのコメント14件

問題を特定するために、上記を次のように再試行しました。

def main(event, context):

    a = 100
    print(a)
    return

import numpy as np

def main(event, context):

    a = np.array(100)
    print(a)
    return

https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-に従って、両方のファイルがnumpyのターゲットインストールを含むpackageディレクトリに圧縮されましたpackage.html。 zipした後、ファイルは最大16MBだったので、インストールが不安定になりました。 numpyをインポートしなかった最初の例は、Lambda関数をテストするときに正常に実行されますが、元のエラーメッセージを含む2番目のエラー

そのAWSガイドはあなたに全体の話をしているわけではありません。 Amazon Linuxディストリビューションは、PyPiやconda-forgeなどの通常のNumPyインストールと互換性がありません。

これらのガイドのいずれかに従うか、次のいずれかのリポジトリのzipファイルを使用することをお勧めします。
https://medium.com/@samme/setting -up-python-3-6-aws-lambda-deployment-package-with-numpy-scipy-pillow-and-scikit-image-de488b2afca6
https://medium.com/@korniichuk/lambda -with-pandas-fd81aa2ff25e
https://blog.orikami.nl/building-scipy-pandas-and-numpy-for-aws-lambda-python-3-6-cba9355b44e9
https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy
https://github.com/vitolimandibhrata/aws-lambda-numpy

これはNumPyのバグではないので、問題を解決します。

ありがとう、

ご返信ありがとうございます。 参考までに、AWS Linux OSでEC2インスタンスを開始し、そこにライブラリをインストールすることで、それを機能させることができました。 すべてがうまくいきました。

助けてくれてありがとう、
リー

iOS用のOutlookを入手するhttps://aka.ms/o0ukef


差出人:Ralf [email protected]
送信日:2019年5月4日土曜日6:52 AM
宛先:numpy / numpy
Cc:リージェームス; 著者
件名:Re:[numpy / numpy] AWS Lambda関数にnumpyをインポートできません(#13465)

そのAWSガイドはあなたに全体の話をしているわけではありません。 Amazon Linuxディストリビューションは、PyPiやconda-forgeなどの通常のNumPyインストールと互換性がありません。

これらのガイドのいずれかに従うか、次のいずれかのリポジトリのzipファイルを使用することをお勧めします。
https://medium.com/@samme/setting -up-python-3-6-aws-lambda-deployment-package-with-numpy-scipy-pillow-and-scikit-image-de488b2afca6 https:// urldefense。 proofpoint.com/v2/url?u=https-3A__medium.com_-40samme_setting-2Dup-2Dpython-2D3-2D6-2Daws-2Dlambda-2Ddeployment-2Dpackage-2Dwith-2Dnumpy-2Dscipy-2Dpillow-2Dand-2Dscikit-2Dimage-2Dde488b2afca6&d= DwMCaQ&c = 0hefKdg9jtsMu47wpF0ovg&r = 2qmZ2aA-JTvfrp24tI1PaA&m = o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s = ZKkVD6L0iXq
https://medium.com/@korniichuk/lambda -with-pandas-fd81aa2ff25e https://urldefense.proofpoint.com/v2/url?u=https-3A__medium.com_-40korniichuk_lambda-2Dwith-2Dpandas-2Dfd81aa2ff25e&d=DwMCaQ&c= 0hefKdg9jtsMu47wpF0ovg&r = 2qmZ2aA-JTvfrp24tI1PaA&m = o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s = PQOBXsoiGwGl3XWjQFq
https://blog.orikami.nl/building-scipy-pandas-and-numpy-for-aws-lambda-python-3-6-cba9355b44e9 https://urldefense.proofpoint.com/v2/url?u=https -3A__blog.orikami.nl_building-2Dscipy-2Dpandas-2Dand-2Dnumpy-2Dfor-2Daws-2Dlambda-2Dpython-2D3-2D6-2Dcba9355b44e9&D = DwMCaQ&C = 0hefKdg9jtsMu47wpF0ovg&R = 2qmZ2aA-JTvfrp24tI1PaA&M = o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&S = jm1X8lQ78YL30-NRN2kXnOGAhMS1LKSowIOFQMCpq5Y&E =
https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_pbegle_aws-2Dlambda-2Dpy3.6-2Dpandas -2Dnumpy&d = DwMCaQ&c = 0hefKdg9jtsMu47wpF0ovg&r = 2qmZ2aA-JTvfrp24tI1PaA&m = o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s = 708JP
https://github.com/vitolimandibhrata/aws-lambda-numpy https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_vitolimandibhrata_aws-2Dlambda-2Dnumpy&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2 -KgjOittvdP3EKrsYfomhs&s = poqmiFo_VPWUjgf2NEI4vBxzANNWtRm3sXSUypHO88w&e =

これはNumPyのバグではないので、問題を解決します。


スレッドを作成したため、これを受け取っています。
GitHubの上でそれを表示し、直接このメールに返信https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_numpy_numpy_issues_13465-23issuecomment-2D489329007&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=J7VXklMAkObDeLGzi_DueXIZ7gya0qrVm9tZhLH9dzI&e= 、またはスレッドミュートhttps://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_notifications_unsubscribe-2Dauth_AHKHI4N5E7XURJJTX7INB6LPTWIJVANCNFSM4HKX25DQ&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=zMXEEFbVt2bm8P0Cn2aJbHDaSdV0ABZ_hgsaB2AWUWg&e=を

@rgommersこれに関するpython3.7関連のタックを知っていますか。 私はあなたの3.6のリストからいくつか試してみましたが、常に_multiarraylibについて同じ不満を抱いています。 必要な組み合わせ(numpy、scipy、pandas)が単一の関数の許容サイズを超えているため、AWSの「レイヤー」を作成する必要があります。

@icebackエラーが私が持っていたもの( No module named 'numpy.core._multiarray_umath' )と類似している場合、これは正しいOSでnumpyをインストールしていないことが原因です。

AWSlambdaは実行時にAWSlinuxを実行するため、ターゲットにインストールされたパッケージはすべて適切なOSでインストールする必要があります。 numpypip install --target ./package numpy経由で$ packageディレクトリにターゲットインストールし、別のOS(macOSなど)を実行している場合、ターゲットインストールはOSはネイティブOSから変更されません。

これを回避するには、2つのオプションがあります。

  1. EC2インスタンスなど、AWSLinuxを実行しているマシンからターゲットインストールを実行します。 これは私にとってはうまくいきました。
  2. targetinstallコマンドでランタイムOSを指定する方法を理解してください。 これを行うための良い方法を見つけたら、共有してください😄

@korniichukとgithub / pbegleを含め、先週試したすべてのことを再検討する必要があります。主は他に何を知っていますが、常に同じ場所に行き着きました。 EC2でnumpyを構築することはうまくいっていません。 おそらく間違ったCythonバージョン(aws linuxで利用できるのは0.27のみ)。 #1について詳しく教えてください。 1つのインスタンスにインストールされているnumpyからLambdaのレイヤーにどのように移行しますか?

@iceback Yaこれは私が最初にやったときはイライラしましたが、それは間違いなく可能です。 私は現在、あなたが言及した3つのパッケージを使用してPython3.7でLambda関数を実行しています。

上記の手順1を実行した方法には、ここで説明する、追加の依存関係を持つ関数の更新で概説されている手順に従うことが含まれます。 簡単にするために、ローカルpythonファイルの名前は_pony.py_であり、lambda_functionは_ride_pony_関数で呼び出されると仮定します。

  1. EC2マイクロインスタンスなどのEC2インスタンスを起動して接続します。 ここで手順を見つけます。 インスタンスがAWSLinuxを実行していることを確認します。
  2. python3がインストールされていることを確認してください。 インストールされていない場合は、 sudo yum install python3 -yでインストールしてください
  3. ローカルパッケージ用のディレクトリを作成します。 mkdir package
  4. Lambdaで使用するライブラリをインストールします。 参考までに、Python2とPython3のpipsの混同を避けるために、私は常にpipをモジュールと呼んでいます。 また、これらのインストールでは、いくつかのインストール順序が優先される場合があり、調査する価値がある場合があります。
  5. python3 -m pip install --target ./package numpy
  6. python3 -m pip install --target ./package pandas
  7. python3 -m pip install --target ./package scipy
  8. cd packageを使用してインストールディレクトリに移動します
  9. インストールディレクトリをzip -r9 ../pony.zip .で圧縮します
  10. ここで、ローカルマシンから、EC2インスタンスからローカルへのscp _pony.zip_を、ここの指示に従ってください。
  11. ローカルから、_pony.py_を_pony.zip_に圧縮します。 zip -g pony.zip pony.py 。 これで、zipファイルにラムダコードと、AWS LinuxOSをターゲットとするためにインストールされた必要なPythonモジュールが含まれます
  12. zipファイルをS3にアップロードします(これにより、最大50 MBのより大きなラムダ関数が可能になります)。 コードが小さい場合は、手順10にスキップできます。
  13. ラムダ関数に移動して(またはCLIから更新して)、そのラムダ関数にpony.zipのコードを使用します

**デフォルトの_lambda_function.lambda_handler_でない場合は、ラムダ関数がファイル名とメイン関数_pony.ride_pony_を指していることを確認してください。

どうもありがとうございました。 私はショットを持っていると信じています! (私の理解では、Lambdaレイヤーのzipの上部は「python」である必要があるため、「package」の代わりにそれを使用します)

そのハウツーを大声で誇らしげに叫びなさい! 他の提案(python3.6用でしたが)にどこで反論したかはわかりませんが、関数コードの作業に戻っています。 トンありがとう。

AWSは、NumPyとSciPyを含むレイヤーも公開しました。 https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/から

_お客様からのフィードバックに基づいて、Lambdaレイヤーの使用方法の例を提供するために、Pythonで人気のある2つの科学ライブラリであるNumPyとSciPyを含むパブリックレイヤーを公開しています。 この事前に構築され最適化されたレイヤーは、データ処理および機械学習アプリケーションを非常に迅速に開始するのに役立ちます。_

うーん、AWXのドキュメントが多すぎる可能性はありますか? ;)

2019年10月23日午前4時29分、RalfGommersの[email protected]は次のように書いています。

AWSは、NumPyとSciPyを含むレイヤーも公開しました。 https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/https://aws.amazon.com/blogsから/ aws / new-for-aws-lambda-use-any-programming-language-and-share-common-components /
お客様からのフィードバックに基づいて、Lambda Layersの使用例を提供するために、Pythonで人気のある2つの科学ライブラリであるNumPyとSciPyを含むパブリックレイヤーを公開しています。 この事前に構築され最適化されたレイヤーは、データ処理および機械学習アプリケーションを非常に迅速に開始するのに役立ちます。


あなたが言及されたので、あなたはこれを受け取っています。
GitHubの上に、直接このメールに返信して表示https://github.com/numpy/numpy/issues/13465?email_source=notifications&email_token=AACY7PDHEVUY6IGQ6IXVXPLQQARRNA5CNFSM4HKX25D2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECA5ACQ#issuecomment-545378314 、または退会https://github.com/notifications/unsubscribe- auth / AACY7PFK3DUQOBMT5QA2ID3QQARRNANCNFSM4HKX25DQ

私のために働いたのは、Linuxバージョンのnumpyライブラリを使用することでした(私はmacOSを使用しています)。 https://pypi.org/project/numpy/#filesにアクセスし、探していたバージョンの.whlファイルをダウンロードしました(私にとっては、numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whlでした)。 。 次に、ターミナルに移動し、「unzipnumpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl」を実行して解凍します。 これにより、Lambdaで動作するnumpyバージョンが得られるはずです。 次に、以前と同じようにすべてを圧縮してアップロードします。 結局、信じられないほど苛立たしい問題はかなり簡単に解決されました。

私は同じ問題を抱えていました、私のために働いた解決策は私が私のPCからnumpyをアンインストールしたことです(Windows7)。
私がawslambda関数にレイヤーを追加したよりもAWSlambdascipyと呼ばれるものでそれだけです。

Windowsで同じ問題が発生しましたが、次のいずれかの方法で解決できました。

  • WSL(Windows Subsystem for Linux)で実行されるUbuntuで実行されるAWS SAM(サーバーレスアプリケーションモデル)を使用してLambdaをビルドする
  • --use-containerフラグを使用してAWS SAMでLambdaをビルドします。これには、ドキュメントに次の説明があります。

関数がネイティブにコンパイルされた依存関係を持つパッケージに依存している場合は、このフラグを使用して、AWSLambdaのようなDockerコンテナー内に関数をビルドします。

このページは役に立ちましたか?
0 / 5 - 0 評価