2
1

More than 3 years have passed since last update.

なぜpythonでimportするとモジュールが使えるのか

Posted at

ちょっと気になっていて調べたらなるほどとなったのでメモ

皆さん何気なく使っているimport文。
pipでインストールしたモジュールを使うために、pythonを勉強し始めたときに、きっと誰もが一度は使ったと思います。

import os
import math
import cv2
...

自分で書いたクラス、関数を呼び出したい

ある程度、pythonが書けるようになってくると、自分で書いたコードを分割したりして、管理したいと思うはずです。
例えば、util_func.pyという関数をたくさん定義したファイルを作っておいて、ほかのスクリプトでも使えるようにするみたいな感じです。

その時に、何の考えもなしに

from util_func import f1

みたいな感じに書くと、Module not foundというエラーが出たこと、皆さんありませんか?

そこで調べてみると、以下の様なコードを挿入すると大丈夫らしい。

sys.path.append(os.pardir) #ファイル構成にもよりますが。。。

実際にやってみると、ちゃんとできてる。。。。

この1行のスクリプトが何をやっているか

前置きが長くなりましたが、本題です。
この1行のスクリプトが何をやっているかを簡単に説明します。

まず、sys.pathをprintで出力してみます。

import sys
print(sys.path)

すると以下の様なリストが返ってきます。

[ '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '~/.local/lib/python3.6/site-packages/IPython/extensions', '~/.ipython', '..']

これはpythonが読み込み可能なpathを示しています。

つまり、今まで自作関数やクラスをほかのファイルからimportしたときに、"module not found"と怒られていたのは、sys.pathにそのスクリプトのpathが存在していなかったからなのです。

よって、appendメソッドを使用して、リストにpathの情報を加えてあげると、見事自作のスクリプトを呼び出すことができるというわけです。

2
1
1

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
1