Pythonのimportの挙動

Pythonのimportはsys.pathにリストとして入ってるディレクトリを検索します
sys.pathは以下のディレクトリ で初期化されています。
  • 該当スクリプトが含まれるディレクトリ
  • 環境変数であるPYTHONPATHに含まれるディレクトリ
  • インストールに依存するデフォルトのディレクトリ

一時的に追加するときは、
import sys
sys.path.append("importできるようにしたいディレクトリ")
また、sys.pathに含まれるディレクトリ下にある場合でも、配下のディレクトリに "__init__.py"ファイルが含まれていないとimportすることはできない。"__init__.py"には何も書いてなくても良く、あることが重要・

例えば、example_package下のhoge.pyを実行したい時、
example_package/
    hoge.py
    __init__.py
上記のようにhoge.pyに内容を書き__init__.pyを書き、PYTHONPATHなりをexample_packageディレクトリに通した状態で、
from example_package import hoge
のようにすると適切にhoge.pyを読み込むことができます。example_package配下に更にファイルがある場合も同様で、各下位ディレクトリに__init__.pyが必要です。
__init__.pyは何も書いてなくても良いのですが、そのディレクトリ下のファイルで共通して行う必要がある処理などあればここに書いておけばまとめて実行してくれるので便利です。
また、from example_package import *のように書きたい場合は、__init__.pyの中で
__all__ = ["hoge"]
のように書くと、__all__のリストに設定されたスクリプトを"from example_package import *"と書くことで一括でimportすることができます。
※ * を多用するのは、productionコードでは望ましくないことと言われていますが

参考: https://docs.python.org/3.8/tutorial/modules.html#packages

0 件のコメント :

コメントを投稿