AWS Lambda 上で pytest を動かす というのをやったときに、pytestが勝手に作成するキャッシュ用ディレクトリのせいでLambdaから怒られて動かなかったので調べたときのメモ。
検証環境
- AWS Lambda: python3.6 runtime
- MacOS Sierra 10.12.6: python 3.6
- Ubuntu 16.04 LTS: python 3.5
pytestが勝手に生成するキャッシュ用ディレクトリを無効にする
Lambda 上で pytest を動作させてみると、こんなエラーが発生。
OSError: [Errno 30] Read-only file system: '/var/task/.pytest_cache'
見ての通り Read-onlyの領域に書き込みにいって怒られている。
調べてみると、pytestは勝手に .pytest_cache
というdirectoryを作成するらしく、ここに書き込み・参照を行うと。
cacheのpathを tmp/.pytest_cache
とかに変更できればよいのですが、そういったoptionは見つからず。
※ tmp配下はlambda上で読み書きが許可されている
更に調べると、下記のリポジトリ issue がHit。
Github/pytest: pytest2.8 invariantly writes to working directory + fails on readonly filesystem
cache を pytest 実行時に使用させないOptionを pytest.ini
に記載すれば、cache機能が使われなくなるようだ。
pytest.ini
[pytest]
addopts = -p no:cacheprovider
このOption付きで Lambda 上で再度 pytest を実行すると成功。念の為 Local環境 (Mac + Ubuntu) でも当設定をした状態でpytestを実施してみたが、 .pytest_cache
directoryは作成されなかった。