今回だいぶ引っかかりました…
おなじように引っかかってこの記事にたどり着いたあなたに贈る、
解決方法です。MNISTが使いたいだけなのに、
このモジュールをインポートできるようになるまでにだいぶ時間かかりました….
相対パスがおかしいのか?
絶対パスにしないととおらないのか?
などなどいろいろ試行錯誤しました。
ちなみに私が使用している環境はVisualStudioCodeです。
それでは具体的に解説していきましょう。
Youtubeチャンネルにさまざまな動画を上げています。
↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓
どんなエラーがでる?
それではエラー内容についてみていきましょう。
具体的には、どんなエラーかというと、
モジュールのインポートでそんなモジュールないよ。と怒られるやつです。
エラーが出る箇所はこちら↓↓
from dataset.mnist import load_mnist
はいこれです。
この一文の意味ですが、
datasetフォルダ内にある、
mnist.pyのなかから、
load_mnistというクラスを使いますよ。
という宣言です。
この一文自体特に問題なさそうですよね。
問題は、どこに実行ファイル(.py)があって、
モジュールはどこに存在しているか?です。
書籍の相対パスが効かない?
書籍では、相対ファイルパスを使用しています。
使ってみようというファイルは、
ch03のフォルダに入っています。
ファイルの名前は、mnist_show.pyです。
では、load_mnistが格納されている、mnist.pyはどこにあるでしょう?
それが、ch03と同列に存在するdatasetフォルダの中です。
図示するとこんな感じ。↓↓↓
というわけなので、
mnist_show.pyからmnist.pyを相対パスで指定する場合には、
ひとつ上の階層の、datasetフォルダを指定して、
そのなかのmnistを指定。
さらに、mnistのなかのload_mnistを指定することになります。
書籍では、その相対パスを実現するために、
sys.path.append(os.pardir)
という一文を使っています。
これは、親ディレクトリのパスを、相対パスに使えるようにするものです。
イメージとしては、「..」ですね。
これで一個上の階層が指定できる【はず】なので、
前出の
from dataset.mnist import load_mnist
この一文で問題なく、load_mnistが読み込めるはずでした…
ただ、これだとわたしの環境ではできませんでした。
わたしが実行した解決方法
結局のところ、
一個上の階層を相対パスに指定することをあきらめました。
単純な話ですが、フォルダの構成を変更しました。
【datasetフォルダをch03にコピー】です。
すると、
sys.path.append(os.pardir)
この一文をコメントアウトしても問題なくインポートできるようになりました。
若干チカラワザな気もしませんが、先に進めないのでこれでやっていきます。
pardirが効かない理由がちょっとわかんないです…
まとめ
インポートがとにかくできなくて、先に進めない…
という場合には、とりあえずこれで動くようになるので、
いったんこれで様子見でいいんじゃないですかね…
コメント