開発環境
python 3.6.5
pyenv 1.2.3
keras 2.1.6
h5py 2.7.1
Darwin 16.7.0 Darwin Kernel Version 16.7.0: Tue Jan 30 11:27:06 PST 2018; root:xnu-3789.73.11~1/RELEASE_X86_64 x86_64
起こったこと
フォルダの中身は次のようになっていました。
- keras.py
- base64.py
keras.pyの中身は次のようになっていました。
keras.py
from keras.models import Sequential
from keras.layers import Dense, Activation
これを実行しようとしたところ、以下のようなエラーが出てきました。
Traceback (most recent call last):
File "keras.py", line 1, in <module>
from keras.models import Sequential
File "keras.py", line 1, in <module>
from keras.models import Sequential
ModuleNotFoundError: No module named 'keras.models'; 'keras' is not a package
原因を調べたところ、keras.pyは自分自身をimportしていました。このkeras.pyをlearn.pyに名前を変更してこの問題は解決しましたが、次にkeras.pyを実行したところ次のエラー最後の行に文字が出てきました。
ImportError: cannot import name 'b64encode'
kerasはh5pyというライブラリを使っています。このh5pyの中でbase64をimportしています。これはlearn.pyと同じフォルダにあるbase64.pyをimportしようとしているために出るエラーだということが発覚しました。なのでこのbase64.pyを消してこの問題は解決しました。
余談
ローカルのフォルダにあるファイルをインポートする方法はきちんとあるので、デフォルトでグローバルな場所を探すようにしてもらえたら嬉しいんですが。これは仕様がバグとしか言いようがないですよね。