2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】自作モジュールのimport時にパスが通らない問題を解決

Last updated at Posted at 2023-02-10

環境

Python 3.8.10

初めに

研究で自作モジュールのimportが上手くいかなった時の記録をメモ。
ディレクトリ構成は以下。

スクリーンショット 2023-02-10 16.41.12.png

先に結論

自作モジュール自体が他の自作モジュールをimportする場合、実行したいファイルにおいて、利用する全ての自作モジュールのパス(実行したいファイルからの相対パス)を通す必要がある。

反対に、他の自作モジュールをimportしている自作モジュールでは、パスを通す必要はない。

パスが通らない様子

再掲
スクリーンショット 2023-02-10 16.41.12.png

clustering.ipynbの最初のセルは以下のようになっていて、上位ディレクトリのclustering_util.pyをimportしたい。

import sys
sys.path.append("../")
import clustering_util as cutils

sys.path.append("../../utils/")
from util import * 

また、clustering_util.pyのimportは以下のようになっていて、util.pyをimportしたい。

import sys
sys.path.append("../utils/")
from util import *

つまり、clustering.ipynbの最初のセルを実行すると、clustering_util.pyが読み込まれ、clustering_util.pyutil.pyを読み込むことを期待している。

ただ、このままclustering.ipynbの最初のセルを実行すると

Cell In[1], line 13
---> 13 import clustering_util as cutils

File clustering_util.py:13
---> 13 from util import *
ModuleNotFoundError: No module named 'util'

となる。

原因

原因は至ってシンプルで、実行するclustering.ipynbの最初のセルにおいて、util.pyにパスが通っていない状態でclustering_util.pyが読み込まれ、clustering_util.pyutil.pyの読み込みに失敗していることである。

つまり、clustering_util.pyではutil.pyに対してパスを通す必要はなく、実行したいclustering.ipynbにおいてパスを通してあげる必要がある。

解決策

clustering.ipynbの最初のセルにおいて、clustering_util.pyをimportする前にutil.pyへのパスを通す。

import sys
sys.path.append("../")
sys.path.append("../../utils/") # 先にパスを通す
import clustering_util as cutils
from util import * 

また、clustering_util.pyではutil.pyに対してパスを通す必要はない。

import sys
#sys.path.append("../utils/") 必要ない
from util import *

最後に

初めて書く記事で大変見づらいと思いますが、誰かの助けになれば幸いです。
また研究で困ったことがあれば書いていこうと思います。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?