読者です 読者をやめる 読者になる 読者になる

pythonのpackagesのimportまとめ

python

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