【python】自作モジュールをimportするとModuleNotFoundErrorが出てしまう_フォルダ階層が複雑

【python】自作モジュールをimportするとModuleNotFoundErrorが出てしまう_フォルダ階層が複雑

 自作モジュールの数が増えてい来ると階層別に整理しておきたくなると思いますが、すべてパス指定をしておかないとModuleNotFoundErrorになります。1つ1つパス指定するのは面倒ですので。今回は実行するmain.py以下のすべてのフォルダ階層についてimportできるように自動でパス指定を行います。

【フォルダ構成】
main.py (実行ファイル)
py_self_module
 |-yomikomi.py (自作モジュール)
 |-2層目
  |-list_to_csv.py(自作モジュール)
  |-3-1層目
   |- 以下略
  |-3-2層目
   |- 以下略

【main.py実行結果】


【min.py】

#################################################
import os
from os import path
import sys
#################################################

###自作関数のフォルダを指定#####################################
m_path = path.join(path.dirname((sys.argv[0])),"py_self_module")
print(m_path)

x=[]
for x in os.walk(m_path):
    print(x[0])
    sys.path.append(x[0])
################################################################


import yomikomi
import hozonn
import csv_to_list
import list_search
import list_to_csv
######↑↑ここまでがimport↑↑##################################

【解説】

<8行目>
自作モジュールが入っているフォルダ「py_sel_fmodule」のパスを指定
<12-14行目>
 os.waikで8行目で指定したフォルダ「py_sel_fmodule」以下のフォルダのパスを取得。リスト形式のためfor xi in でxに1要素ごと代入。
 13行目のprintの結果が実行結果の2行目以降の結果として出ている。
 14行目でprintで表示されているフォルダをpythonのimport先として追加
 ※詳細は下記を参照ください
 【python】自作モジュールをimportするとModuleNotFoundErrorが出てしまう │ プログラミングのメモ帳 (sun-sun-sunday.com)

<18行目以降>
 自作モジュール群の読み込み。自分の好きなものを指定ください。