ちょっと気になっていて調べたらなるほどとなったのでメモ
皆さん何気なく使っている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の情報を加えてあげると、見事自作のスクリプトを呼び出すことができるというわけです。