何か特殊な事情があって動的にimportしたい時に使えます。
全てはドキュメントに書いてあったりするのですが、ちょっと分かりづらいので、手っ取り早く使いたい人は以下のコードを最初の方に仕込んでおくと良いと思います。
import importlib.machinery
import sys
class PackageFinder(importlib.machinery.PathFinder):
@classmethod
def find_spec(cls, fullname, path=None, target=None):
if not path:
path = []
# pathに探してほしいディレクトリのリストを指定する
path.append("/path/to/package/root")
return importlib.machinery.PathFinder.find_spec(fullname, path, target)
sys.meta_path.append(PackageFinder)
上記コードのpathを動的に切り替えるなりなんなりする事で、特定のディレクトリを同期して読み込んだり、リモートのディレクトリをダウンロードして読み込んだり、といったアクロバティックなこともできるようになります(推奨しているわけではないです)。
尚、sys.path_hooksというのもあって、こちらはパスを追加するのではなく、パスを引数にとって、それに対応するモジュールimportの挙動をカスタマイズしたい時に使うみたいです。