pythonのインポートてよく分からなかったので調べてみた。
確認用モジュールのフォルダ構成
D:\WORK\PYTHON\TEST │ main.py │ __init__.py │ └─ package sub.py __init__.py
main.pyからsub.pyを使用する為にインポートを行う。なお、sub.pyの中身はこんな感じ。
def dog(): print "wan!wan!"
importによるインポート1(正常)
#-*- coding:utf-8 -*- #パッケージ名.モジュール名を記述 import package.sub #パッケージ名.モジュール名.関数名で呼び出す package.sub.dog() #実行結果 wan!wan!
importによるインポート2(エラー)
#-*- coding:utf-8 -*- #パッケージ名を記述 import package #パッケージ名.モジュール名.関数名で呼び出す package.sub.dog() #実行結果 Traceback (most recent call last): File "D:\work\python\test\main.py", line 7, in <module> package.sub.dog() AttributeError: 'module' object has no attribute 'sub'
importによるインポート3(エラー)
#-*- coding:utf-8 -*- #パッケージ名.モジュール名.関数名を記述 import package.sub.dog #パッケージ名、モジュール名、関数名で呼び出す package.sub.dog() #実行結果 Traceback (most recent call last): File "D:\work\python\test\main.py", line 4, in <module> import package.sub.dog ImportError: No module named dog
fromによるインポート1(正常)
#-*- coding:utf-8 -*- #from:パッケージ名、import:モジュール名を記述 from package import sub #モジュール名.関数名で呼び出す sub.dog() #実行結果 wan!wan!
fromによるインポート2(正常)
#-*- coding:utf-8 -*- #from:パッケージ名.モジュール名、import:関数名を記述 from package.sub import dog #関数名で呼び出す dog() #実行結果 wan!wan!
fromによるインポート3(正常)
#-*- coding:utf-8 -*- #from:パッケージ名.モジュール名、import:*を記述 from package.sub import * #関数名で呼び出す dog() #実行結果 wan!wan!
fromによるインポート3(エラー)
#-*- coding:utf-8 -*- #インポート時:from‐パッケージ名、import:モジュール名.関数名を記述 from package import sub.dog #関数名で呼び出す dog() #実行結果 File "D:\work\python\test\main.py", line 4 from package import sub.dog ^ SyntaxError: invalid syntax
fromによるインポート4(エラー)
#-*- coding:utf-8 -*- #from:パッケージ名、import:*を記述 from package import * #モジュール名.関数名で呼び出す sub.dog() #実行結果 Traceback (most recent call last): File "D:\work\python\test\main.py", line 7, in <module> sub.dog() NameError: name 'sub' is not defined
まとめ
importでインポートを行う時は、パッケージ名.モジュール名を宣言する。使用する時はパッケージ名.モジュール名.関数名で呼び出す。
fromでインポートを行う時は2種類書き方がある。一つ目はfromにパッケージ名、importにモジュール名を宣言するパターン。この場合使用する際はモジュール名.関数名で呼び出す。二つ目はfromにパッケージ名.モジュール名、importに関数名を宣言するパターン。この場合使用する際は関数名で呼び出す。
整理してみてやっと理解出来た。やっぱり手を動かす事が大切だな。