AWS LambdaでPythonを動かす場合”PYTHONPATH“は「/var/runtime」になっているようで
下記コードを実行すると確認できます
import json
import os
def lambda_handler(event, context):
PYTHONPATH = os.getenv('PYTHONPATH', '')
print(PYTHONPATH)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
下記のコードを使ってsys.pathを確認すると
import json
import os
import sys
def lambda_handler(event, context):
PYTHONPATH = sys.path
print(PYTHONPATH)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
[‘/var/task’, ‘/opt/python/lib/python3.8/site-packages’, ‘/opt/python’, ‘/var/runtime’, ‘/var/lang/lib/python38.zip’, ‘/var/lang/lib/python3.8’, ‘/var/lang/lib/python3.8/lib-dynload’, ‘/var/lang/lib/python3.8/site-packages’, ‘/opt/python/lib/python3.8/site-packages’, ‘/opt/python’]配列で入っています
Lambdaの環境変数設定にPYTHONPATHを追加した
Lambdaを実行すると環境変数が予想通り設定できているように思うが違うようにも思える
['/var/task', '/var/runtime', '/var/task/lib', '/var/runtime', '/var/lang/lib/python38.zip', '/var/lang/lib/python3.8', '/var/lang/lib/python3.8/lib-dynload', '/var/lang/lib/python3.8/site-packages']
環境変数でのPYTHONPATH追加は大丈夫なのか?よくわからないのでPythonのコードに追加して確かめる
import json
import os
import sys
def lambda_handler(event, context):
sys.path.append(os.path.join(os.path.dirname(__file__), 'lib2'))
print(PYTHONPATH)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
lib2を追加した下記のようにlib2も追加されていた
[
'/var/task', '/var/runtime', '/var/task/lib', '/var/runtime', '/var/lang/lib/python38.zip',
'/var/lang/lib/python3.8', '/var/lang/lib/python3.8/lib-dynload',
'/var/lang/lib/python3.8/site-packages', '/var/task/lib2'
]
PYTHONPATHとsys.pathがイコールなのかわからないけど同じようにも見える
結果:思ったことは、Lambda環境設定のPYTHONPATHに追加すればいい感じにしてくれるのかもしれない
pip3 インストール ターゲットpath指定
AWS Lambda Function内のlibにpip3インストールしたライブラリを入れたい場合下記のコマンドで可能です
pip3 install --target ./lib インストールしたいモジュール名