LoginSignup
0
0

More than 5 years have passed since last update.

python import関連のメモ

Last updated at Posted at 2018-09-27

python 3を対象

用語

  • module: import される対象(fileのようなもの)
  • package: 中に階層構造をもつmodule(difのようなもの)

    __path__ 属性をもってるmoduleはpackageと呼ばれる

  • __name__: importするときにmoduleをユニークに識別するのに利用. 完全修飾名で記述 aa.bb.cc

  • __package__: sub moduleなら親のpackage名, top levelのmoduleは空の文字列. 値は文字列

注意:全てのpackageはmoduleだが、全てのmoduleはpackageとは限らない(中に構造がないmoduleもある)

検索順序

  1. sys.modules:すでにimportされたmodule
  2. 組み込みmodule
  3. freezeツールで処理されたmodule
  4. import pathを起点にしてmoduleの検索

importの種類

  • explicit 相対import (implicit相対importはpython3では廃止)

from .package import module: current

from ..package import module: parent

from ...package import module

  • 絶対 import

import aaa: sya.pathに存在する必要がある(相対なら from . import aaa)

explicit 相対importの注意点

  1. package属性がNoneかつname属性がmainのとき、相対importは使えない (python xxx.pyを実行時 xxx.py中では相対importは使えない)
  2. working dirを通過する相対importは使えない

回避方法

1.について
python aaa/bbb.pyで実行
python -m aaa.bbbで実行

-m option: sys.path から指定されたモジュール名のモジュールを探し、その内容を main モジュールとして実行します。

2.について
working dirをより親にする(もしはsys.pathに追加して)working dirを相対 importが通過しないようにする

[http://d.hatena.ne.jp/chlere/20110618/1308369842]

結局 sys.pathや環境変数PYTHONPATHを使うことになるので絶対importしてsetup.pyを書いてinstallすること推奨

0
0
0

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
0
0