ざっくりまとめ
-
pyenv global 3.9.6
とかでPython3.9系をGlobalで利用するようにしていた - この状態でVS CodeからLambdaのデバッグを実行しようとするとSAMのビルドでコケる
- SAMでビルドするときに
python3.8
を要求するため
- SAMでビルドするときに
-
pyenv global 3.9.6 3.8.10
とかでpython3.8
が実行できるようにしてあげる必要があった
背景
SAMでアプリをカキカキしようとしてデバッグしたいなーと思ってぺいっとF5をを押したらこんなエラーが
2021-08-11 18:32:36 [INFO]:
Build Failed
2021-08-11 18:32:37 [INFO]: Error: PythonPipBuilder:Validation - Binary validation failed for python, searched for python in following locations : ['/Users/****/.pyenv/shims/python3.8', '/Users/****/.pyenv/shims/python', '/usr/bin/python'] which did not satisfy constraints for runtime: python3.8. Do you have python for runtime: python3.8 on your PATH?
2021-08-11 18:32:37 [WARN]: "sam build" failed: /Users/****/work/test-sam/app___vsctk___template.yaml
ちーん
試したこと
python3.8が叩ければいいんだなということで色々試す
- このsam templateが置かれてるWorkDirで
pyenv local 3.8.11
- 普通にコマンドライン上では
sam build
ができるようになる - VS Code経由でsam実行されると同じエラー
- どうやらpyenvのアレコレが効いてくれない...
- 普通にコマンドライン上では
-
pyenv global 3.8.11
- 普通に通るようになった
- どこのパスにいても
python3.8
を実行できるようにしておけばいいんだな - でもこうするとglobalで使いたいpython3.9が使えなくなってまうで...
解決
-
pyenv global 3.9.6 3.8.11
- バージョン複数指定してあげるとそのバージョンのバイナリも叩けるようになる
- 知らなかった
- バージョンは先頭に来る方が優先される模様
- ↑の場合は
python
pip
とかで実行されるpythonは3.9.6
になる
- ↑の場合は
結論
pyenvのドキュメントちゃんと読みましょう