俺言語。

自分にしか理解できない言語で書かれた備忘録

【Python】Import問題

すごくわかりづらいので自分なりにまとめ。まだ合っている自信がない。


- 明示的相対Import

from . import lib

.(ドット)はimportを実行しようとしているモジュールが属している同一パッケージを示す。


- 絶対Import
sys.pathやPYTHONPATHに登録されているパスからモジュールを捜索する。
sys.pathにはルートのスクリプト/モジュールのパスやカレントディレクトリが含まれ、ルートのスクリプト/モジュールからimportされたスクリプト/モジュールのパスは含まれない


- sys.path
sys.pathの中身はrootのスクリプト/モジュールとそこからimportした先のスクリプト/モジュールとで共通
e.g.) rootのスクリプトでsys.pathに追加した内容はimportされたスクリプトからでも確認できる。(変数のスコープの様にスクリプト/モジュールごとのpathだと思ってた)

よく起きる問題

絶対Importだけでは他のスクリプトから呼ばれる場合と自らがrootになる場合とでsys.pathが変わってしまい、Importエラーが起きやすい

  • Importを実行しようとしているファイルの場所をsys.pathに追加する。そうするとこのImportを実行しようとしている下階層のスクリプト/モジュールは常に呼び出せる
sys.path.append(str(pathlib.Paht(__file__).parent))