pythonのpackagesのimportまとめ
pythonのpackagesのimportの仕方と使いかたのメモ。
pythonはディレクトリ内に__init__.py
を置いておくと、ディレクトリはpackagesとして認識される。
__init__.py
はpackagesの初期化処理を記述し、なければ空で良い。
まとめ
- packages内のフォルダ名及びファイル名はC++などでいうところの名前空間のような役割。
- 単純に
import
する場合は、その名前空間を利用可能にするだけで、省略はできない - packages名などの省略をしたい場合は
from packages import sub
などを利用する。
テストファイル
ディレクトリ構成は以下。
├── main.py └── packages ├── __init__.py ├── egg.py └── sub ├── __init__.py └── sub_egg.py
main.py
import sys #to get function name. def test0(): print sys._getframe().f_code.co_name print " ", #packages.egg.egg() error def test1(): print sys._getframe().f_code.co_name print " ", import packages.egg packages.egg.egg() def test2(): print sys._getframe().f_code.co_name print " ", from packages import egg egg.egg() #packages.egg.egg() error def test3(): print sys._getframe().f_code.co_name print " ", import packages from packages import egg packages.egg.egg() def test4(): print sys._getframe().f_code.co_name print " ", import packages.sub.sub_egg packages.sub.sub_egg.sub_egg() #sub_egg() error def test5(): print sys._getframe().f_code.co_name print " ", from packages.sub import sub_egg sub_egg.sub_egg() def test6(): print sys._getframe().f_code.co_name print " ", from packages.sub.sub_egg import sub_egg sub_egg() def test7(): print sys._getframe().f_code.co_name print " ", import packages packages.sub.sub_egg.sub_egg() if __name__ == '__main__': test0() test1() test2() test3() test4() test5() test6() test7()
packages/egg.py
def egg(): print "packages.egg"
packages/sub/sub_egg.py
def sub_egg(): print "packages.sub.sub_egg"
実行結果
packages.egg packages.egg packages.egg packages.sub.sub_egg packages.sub.sub_egg packages.sub.sub_egg packages.sub.sub_egg