###実現したいこと
ディレクトリ上位または別階層にある自作モジュールをimportしたいです。
下記のようなディレクトリ構成で、module_a.pyより、各module_b~dをimportすることを試みています。
test
├ dir_a - module_a.py
| ├ module_b.py
| └ dir_c ------ module_c.py
└ dir_d - module_d.py
###環境
環境:MacOS11.6、Python3.10, VSCode
###解決したいこと
module_cまでは、import出来てたのですが、module-dがなかなか上手くいきません。調べているなかで、python3では、上位階層のアクセスが難しいことまでは解ってきました。
更に、sys.path.appendを使って、パスを追加指定すると上手くいく事例は散見することが出来ましたが・・・この辺りからつまずいております。色々試してみたのですが、なかなか解決出来ません。一度、みて頂いてご意見頂ければと思います。
###出来ているとこまでのコード
まず、module_cまでは、下記で出来ていますが、コレはコレで大丈夫でしょうか?
python
1# dir_a/module_a.py 2# importの練習 3# test 4# ├ dir_a - module_a.py 5# | ├ module_b.py 6# | └ dir_c ------ module_c.py 7# └ dir_d - module_d.py 8 9import module_b 10from dir_c import module_c 11 12print('this is module_a.py') 13module_b.method_b() 14module_c.method_c()
python
1# dir_a/module_b.py 2def method_b(): 3 print('this is module_b.py')
python
1# dir_a/dir_c/module_c.py 2def method_c(): 3 print('this is module_c.py')
python
1# dir_d/module_d.py 2def method_d(): 3 print('this is module_d.py')
結果
terinal
1this is module_a.py 2this is module_b.py 3this is module_c.py
###解決したいコード
そして、こちらが、module_dが、import出来ない今、試しているコードです。
python
1# importの練習 2# test 3# ├ dir_a - module_a.py 4# | ├ module_b.py 5# | └ dir_c ------ module_c.py 6# └ dir_d - module_d.py 7 8import module_b 9import sys 10from pathlib import Path 11from dir_c import module_c 12from dir_d import module_d 13sys.path.append(str(Path(__file__).parent.parent)+'/dir_d') 14 15print('this is module_a.py') 16module_b.method_b() 17module_c.method_c() 18module_d.method_d() 19print(sys.path)
###エラーメッセージ
出てくるエラーは下記の通りです。
error
1ModuleNotFoundError: No module named 'dir_d'
一応、コメントアウトして、パスが追加出来ているかも確認していると、下記のような感じで、追加されている感じです。
terminal
1'~/python3_10/test/dir_a','~/versions/3.10.0/lib/python310.zip','~/3.10.0/lib/python3.10','~/3.10.0/lib/python3.10/lib-dynload', '~/3.10.0/lib/python3.10/site-packages','~/test/dir_d'
試したこと等
あと試したことの一つは、sys.path.append内で、os.path.dirnameで、カレントのディレクトリを検索して、'/dir-d'と追記して出来るような感じ解説されているのも下記のように試してみましたが、
python
1sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
どうしても上位のディレクトリに戻ることが出来ず、更に、'..'だけでは、下記の結果のように文字列としてパスに追記されるだけでした。
terminal
1'~/~/test/dir_a/..'
以上ですが、基本的な質問で大変恐縮ですが、どなたか宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/10 10:24 編集