- AWS
Lambda Unable to import moduleの直し方|Python
Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named '○○' は、Lambda が関数を読み込む(import する)段階で失敗したときのエラーです。 コードの中身が動く前のエラーなので、原因は「何が入っているか(zip の中身)」と「どこを指しているか(ハンドラ名)」のどちらかです。
No module named のあとの名前で、原因がほぼ決まります。
| メッセージ | 原因 | 直し方 |
|---|---|---|
No module named 'requests' など、ライブラリ名 |
ライブラリを zip に入れていない | pip install -t で入れて zip に含める |
No module named 'lambda_function'、自分のファイル名 |
zip の1階層下にファイルがある、またはファイル名とハンドラ名が違う | zip の一番上にファイルを置く/ハンドラ名を合わせる |
cannot import name '…' from 'pydantic_core._pydantic_core' など |
Mac・Windows や別の Python の版で入れたネイティブ拡張 | pip install --platform manylinux2014_x86_64 で入れ直す |
Handler 'lambda_handler' missing on module |
ファイルはあるが、関数名が違う(Runtime.HandlerNotFound) |
ハンドラ設定の関数名を合わせる |
Syntax error in module(Runtime.UserCodeSyntaxError) |
構文エラー | 手元で python -m py_compile |
確認方法:AWS が公開している Lambda のランタイムクライアント(awslambdaric 4.2.0、Python 3.11、Linux x86_64)を手元で動かし、Lambda と同じ読み込み処理で再現しました。表のメッセージは、ランタイムクライアントが Lambda に送ったエラー本文そのままです(確認日 2026年10月12日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Lambda Unable to import moduleの直し方|Python」
まず CloudWatch Logs でメッセージ全文を見る
コンソールの「テスト」の結果か、CloudWatch Logs に次のように出ます(手元で再現したときの出力)。
[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'requests'
Lambda に送られたエラー本文は次の形でした。
{"errorMessage": "Unable to import module 'lambda_function': No module named 'requests'",
"errorType": "Runtime.ImportModuleError", "stackTrace": []}
Unable to import module 'lambda_function' の lambda_function はハンドラ名の前半(ファイル名)、No module named のあとが「見つからなかったもの」です。
原因① ライブラリを zip に入れていない(No module named 'requests')
Lambda の Python ランタイムに最初から入っているのは、標準ライブラリと AWS SDK(boto3)です。 requests のように自分で pip で入れたライブラリは、zip に含めないと見つかりません。
import requests # ← zip に requests が無いとエラー
def lambda_handler(event, context):
return {"statusCode": 200}
直し方は、ライブラリを package フォルダに入れ、関数のファイルと一緒に zip にすることです。 AWS のドキュメントの手順です。
cd my_function
mkdir package
pip install --target ./package requests
cd package
zip -r ../my_deployment_package.zip . # ライブラリを zip の一番上に
cd ..
zip my_deployment_package.zip lambda_function.py # 関数のファイルも一番上に
手元で requests を入れて同じ関数を動かすと、{"statusCode": 200, "requests": "2.34.2"} が返りました。
複数の関数で同じライブラリを使うなら、Lambda レイヤーにまとめる方法もあります。レイヤーの作り方は、関連記事「AWS CLIでLambdaを作成・更新 環境変数とレイヤー」で扱っています。
原因② zip の1階層下にファイルがある(No module named 'lambda_function')
フォルダごと zip にすると、ファイルが1階層下に入り、Lambda から見つかりません。
NG:フォルダごと zip にした OK:フォルダの中身を zip にした
my_function/ lambda_function.py
my_function/lambda_function.py
# NG
zip -r bad.zip my_function
# OK(フォルダの中に入ってから)
cd my_function && zip -r ../good.zip .
unzip -l で中身を確かめると違いが分かります。
$ unzip -l bad.zip
0 my_function/
83 my_function/lambda_function.py
$ unzip -l good.zip
83 lambda_function.py
NG の zip を展開した状態で動かすと、Unable to import module 'lambda_function': No module named 'lambda_function' になりました。AWS のドキュメントにも「ハンドラのあるファイルとすべての依存関係は、zip の一番上(ルート)に置く」とあります。
フォルダそのものを選んで圧縮すると、この NG の形になります。 GUI で圧縮するときも、フォルダの中のファイルを選んでから圧縮します。
原因③ ファイル名とハンドラ名が違う
ハンドラ名は「ファイル名(.py なし).関数名」です。 コンソールで作った関数の既定は lambda_function.lambda_handler なので、ファイル名を app.py にすると読み込めません。
| ファイル | ハンドラ設定 | 結果 |
|---|---|---|
lambda_function.py に lambda_handler |
lambda_function.lambda_handler |
動いた |
app.py に lambda_handler |
lambda_function.lambda_handler |
No module named 'lambda_function' |
app.py に lambda_handler |
app.lambda_handler |
動いた |
lambda_function.py に handler |
lambda_function.lambda_handler |
Runtime.HandlerNotFound |
関数名が違うときは、ImportModuleError ではなく別のエラーでした。
{"errorMessage": "Handler 'lambda_handler' missing on module 'lambda_function'",
"errorType": "Runtime.HandlerNotFound"}
ハンドラ設定は、コンソールの「コード」タブ →「ランタイム設定」→「編集」で変えられます。
原因④ Mac・Windows・別の Python の版で入れたライブラリ
pydantic・numpy・cryptography など、C や Rust で書かれた部分(ネイティブ拡張)を持つライブラリは、OS・CPU・Python の版ごとに別のファイルです。 Mac で pip install -t して zip にすると、Lambda(Amazon Linux)では読み込めません。
手元で、Mac(arm64)用と Python 3.13 用の pydantic を入れて、Python 3.11 のランタイムで動かすと、次のメッセージになりました。
{"errorMessage": "Unable to import module 'lambda_function': cannot import name 'ArgsKwargs' from 'pydantic_core._pydantic_core' (unknown location)",
"errorType": "Runtime.ImportModuleError"}
Mac 用で入れたフォルダの中を見ると、ファイル名に darwin(macOS)が入っていました。
pydantic_core/_pydantic_core.cpython-311-darwin.so
No module named ではなく cannot import name ... (unknown location) という形になるので、原因①と見分けがつきにくいエラーです。ライブラリ名の下に _ で始まるモジュール(_pydantic_core など)が出ていたら、この原因を疑います。
直し方は、Lambda の CPU と Python の版を指定して入れ直すことです。 AWS のドキュメントのコマンドです。
# x86_64 の関数(Python 3.13 の例)
pip install \
--platform manylinux2014_x86_64 \
--target=package \
--implementation cp \
--python-version 3.13 \
--only-binary=:all: --upgrade \
pydantic
# arm64(Graviton)の関数
pip install --platform manylinux2014_aarch64 --target=package \
--implementation cp --python-version 3.13 --only-binary=:all: --upgrade pydantic
| 合わせるもの | どこで確かめるか |
|---|---|
| CPU(x86_64 か arm64) | 関数の「ランタイム設定」の「アーキテクチャ」 |
| Python の版 | 同じく「ランタイム」(python3.13 など) |
手元で Python 3.11・x86_64 を指定して入れ直すと、{"name": "RJC"} が返り、読み込めました。
原因⑤ 構文エラー(UserCodeSyntaxError)
def の行の : を消すと、別の種類のエラーになりました。
{"errorMessage": "Syntax error in module 'lambda_function': expected ':' (lambda_function.py, line 1)",
"errorType": "Runtime.UserCodeSyntaxError"}
zip にする前に、手元で python -m py_compile lambda_function.py を実行すると見つけられます。
アップロード前のチェックリスト
| 確かめること | コマンド・場所 |
|---|---|
lambda_function.py が zip の一番上にある |
unzip -l 関数.zip |
| 使っているライブラリが zip の一番上にある | unzip -l 関数.zip | grep requests |
| ハンドラ設定が「ファイル名.関数名」と合っている | コンソール →「ランタイム設定」 |
ネイティブ拡張を含むライブラリを --platform 付きで入れた |
.so のファイル名に darwin・win が無い |
| Python の版とアーキテクチャが、入れたときと同じ | コンソール →「ランタイム設定」 |
よくある質問
Q. boto3 も zip に入れる必要がありますか。 A. Lambda の Python ランタイムには boto3 が入っています。AWS のドキュメントでは、入っている版はランタイムの版とリージョンによって決まるとされています。特定の版の機能を使うなら、zip に入れて版を固定する方法もあります。
Q. コンソールのエディタで直接書いたら動いたのに、zip にしたら動きません。
A. zip の階層(原因②)か、ファイル名(原因③)を確かめます。unzip -l で一番上に lambda_function.py があるかを見ます。
Q. SAM や CDK を使っても起きますか。
A. SAM の sam build は、requirements.txt のライブラリを入れて組み立てるので、原因①は起きにくくなります。関連記事「AWS SAM入門」で扱っています。
まとめ
Unable to import moduleは、関数を読み込む前の失敗。原因は zip の中身かハンドラ名No module named 'ライブラリ名'は入れ忘れ。pip install --target ./packageで zip に含めるNo module named 'lambda_function'は zip の階層かファイル名。ファイルは zip の一番上cannot import name ... _pydantic_coreは Mac などで入れたネイティブ拡張。--platform manylinux2014_x86_64で入れ直す- 関数名違いは
Runtime.HandlerNotFound、構文エラーはRuntime.UserCodeSyntaxError
参考・出典
確認日はいずれも 2026年10月12日です。
- AWS Lambda デベロッパーガイド「Working with .zip file archives for Python Lambda functions」:https://docs.aws.amazon.com/lambda/latest/dg/python-package.html
- AWS Lambda デベロッパーガイド「Define Lambda function handler in Python」:https://docs.aws.amazon.com/lambda/latest/dg/python-handler.html
- AWS Lambda デベロッパーガイド「Building Lambda functions with Python」(ランタイム一覧・含まれる SDK):https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html
- awslambdaric(AWS Lambda Runtime Interface Client for Python)4.2.0:https://pypi.org/project/awslambdaric/
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Lambda Unable to import moduleの直し方|Python」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。