Posted at

pythonのimportに関する使用に関して

More than 1 year has passed since last update.


開発環境

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を消してこの問題は解決しました。


余談

ローカルのフォルダにあるファイルをインポートする方法はきちんとあるので、デフォルトでグローバルな場所を探すようにしてもらえたら嬉しいんですが。これは仕様がバグとしか言いようがないですよね。