環境
- Python 3.7.0
- boto3 1.9.55
問題
- Lambda 用に開発していた Python スクリプトをローカルでテストしようとしたら、
'email' is not a package
というエラーメッセージが生じた。 - Traceback をみたら冒頭の
import boto3
で発生したようだった。
エラーメッセージ
Traceback (most recent call last):
File "mail_send_test.py", line 1, in <module>
import boto3
:
File "/home/ec2-user/.pyenv/versions/3.7.0/lib/python3.7/cgi.py", line 39, in <module>
from email.parser import FeedParser
ModuleNotFoundError: No module named 'email.parser'; 'email' is not a package
原因
- 実行スクリプトと同じディレクトリに自作の
email.py
があったため。- boto3 が Python 標準の cgi モジュールを呼び出しており、さらにその中で email というモジュールをインポートしている。
- Python 標準の
email
と、自作のemail
がバッティングして、後者の方が優先された。(cf. https://docs.python.jp/3/tutorial/modules.html#the-module-search-path)
対処
- 自作の
email.py
をリネームする。