1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[python] Lambda Layerからlangchainがインポートできなくて少しはまった話

Posted at

以下の記事を参考にLangchainを利用するためのLambda Layerを構築したが、モジュールの呼び出し時にエラーが出て解決に少々てこずったので備忘録

エラーの状況

Lambdaを実行すると以下のようなエラーが発生:

[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'langchain'

レイヤーを作成してきちんとアタッチしたはずなのに...なぜ?

考えられる原因

1. レイヤーの構造がおかしい

下記の記事にある通りにレイヤーの構造が実装ができていない場合、動かない

2. Pythonのバージョン不一致

Lambda関数で選択したPythonのバージョンとレイヤーを作成したPythonのバージョンが異なると動かない。← 今回の原因これ。

3. 依存関係が足りない

langchainは他のライブラリに依存していることが多く、それらも一緒にインストールする必要があります。

解決方法

正しいディレクトリ構造でレイヤーを作る

# こんな感じで構造を作ります
mkdir -p python/lib/python3.9/site-packages
pip install langchain -t python/lib/python3.9/site-packages/

# ZIPファイル作成
cd python
zip -r ../langchain-layer.zip .

重要なのは python/lib/pythonX.X/site-packages/ この構造

Pythonバージョンの一致を確認

Lambda関数とLayerで同じPythonバージョンを使用しているか確認する

デバッグコードを追加

どうしても原因がわからない場合は、Lambdaに以下のコードを追加して検索パスを確認:

import sys
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    logger.info("Python Path: %s", sys.path)
    # ここでパスを確認できる

まとめ

私の利用していたpythonのバージョンは3.13.xで、Layerの構築で参考にした記事のpythonバージョンは3.12.xであったため、今回のインポートエラーが発生していた。
単純なミスではあったが、なかなか気づくことができなかったので、この記事が誰かの役に立つことを祈っています!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?