はじめに
importしようとしたところ、ImportError: attempted relative import with no known parent packageのエラーがでて、意外な方法で解決できたので紹介
今回起きた現象
project/
│
├─ a_package/
│ ├─ A.py
│
├─ b_package/
├─ B.py
上記のディレクトリ構造の時、A.pyからB.pyのクラスをimportしたかった。
相対パスでimportしようとすると下記のようになります。
# A.py
from ..b_package.B import B_class
しかし... こんなエラーがでてしまう...
ImportError: attempted relative import with no known parent package
解決策
import os
import sys
sys.path.append(os.getcwd())
from b_package.B import B_class
これでimportできました。
これで動く理由
sys.pathには、Pythonインタプリタがモジュールを検索するディレクトリのパスが格納されています。
そこに、projectのディレクトリを追加(append)することによって、import時に、project直下も検索するようになってくれる。
という理屈だと思います...多分...