概要
AWSのLambdaでOpenCVを使うため、自分のパソコン上でOpenCVのパッケージと実行したいコードをzipファイルにまとめ、S3に保存しました。
そしてLambdaの関数コードにS3のURLを指定することで、実行したのですが、以下のエラーメッセージが出力されました。
エラーメッセージ
エラー文
[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'cv2.cv2'
ログ全文
START RequestId: 58869885-9abd-4b18-8393-6d023d268637 Version: $LATEST [ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'cv2.cv2' END RequestId: 58869885-9abd-4b18-8393-6d023d268637 REPORT RequestId: 58869885-9abd-4b18-8393-6d023d268637 Duration: 1.59 ms Billed Duration: 2 ms Memory Size: 256 MB Max Memory Used: 66 MB Init Duration: 294.98 ms
※S3に保存したzipファイル内に、lambda_function.pyというメインのPythonファイルがあり、その中でimport cv2
をしています。
試したこと
OpenCVのバージョンや他のパッケージとの整合性に問題があるかと思い、以下の2点で変更を加えましたが、上手く行きませんでした。
import opencv-python -t .
からpip install opencv-python==3.4.5.20 -t .
に変更python3 venv (仮想環境名)
で仮想環境を作成し、仮想環境上でpip installコマンドを実行
ローカルではimport cv2
でエラーにはならず、実行したいlambda_function.py
も処理ができています。
S3上のzipファイルの中身
lambda-package.zip
- lambda_function.py
- bin
- cv2
- include
- lib
- numpy
- numpy-1.20.1.dist-info
- opencv_python-3.4.5.20.dist-info
- pyvenv.cfg
補足情報
- 仮想環境でのPythonのバージョン:3.7.6
- LambdaでのPythonのバージョン:3.7
- OpenCV:3.4.5.20
- Lambdaのタイムアウト:1分
- Lambdaのメモリ:256MB
蛇足
Google検索で引っかかった記事は全てを読んだのですが、Lambda上でOpenCVをインポートする基本の方法で止まっており、今回のようなエラー対応については書かれていませんでした。そのため藁にもすがる思いで、teratailで初めて質問させていただきました。もしどんなに小さな手がかりでもありましたら、ご教授いただけますと幸いです。
あなたの回答
tips
プレビュー