Python3 同じ親フォルダの違う子フォルダからモジュールをインポートする

Deep Learningの本を手を動かしながら、かつ、遭遇した問題を解決しながら読んでいる。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
斎藤 康毅
オライリージャパン
売り上げランキング: 108

datasetを利用するところで若干詰まった。このコード。

# /root/ch03/sample.py
import sys, os
sys.path.append(os.pardir)
# /root/dataset/mnist.pyをロードしたい
from dataset.mnist import load_mnist  # ModuleNotFoundError: No module named 'dataset'

これは、os.pardirの問題。これはprintすればわかるが、..と等価(Macでは)。 一見正しそうだが、print(sys.path)を挟むと、正しくない模様。

ch03フォルダの親フォルダが加わって欲しいところが、そのさらに親フォルダが追加されてしまう。 VSCodeの問題かもしれないが。相対パスが良くない。

なので、絶対パスで指定するようにする。

# /root/ch03/sample.py
import sys, os
rootdir = os.path.dirname(os.path.dirname(__file__))
sys.path.append(rootdir)
from dataset.mnist import load_mnist

こうするとエラーを吐かなくなった。

コメント

タイトルとURLをコピーしました