[Python]外部ファイルのインポート
公開日:2025-12-11
更新日:2025-12-11
更新日:2025-12-11
1. 概要
外部ファイルで定義された関数やクラスを使用できるようにします。
インポートできるモジュールは、sys.path に含まれるディレクトリ配下にあるモジュールです。
インポートできるモジュールは、sys.path に含まれるディレクトリ配下にあるモジュールです。
2. 同じ階層のモジュールのインポート
2.1 フォルダ構成
フォルダ構成
プロジェクトフォルダ
├─ main.py
└─ sub.py2.2 main.py
コード
import sub # モジュールのインポート。sub.py を読み込んで即座に実行する
sub.test_sub() # test_sub()
# test_sub() # エラー : モジュールしかインポートしていないため、関数を直接呼ぶことはできない2.3 sub.py
コード
print('sub') # インポートされると即座に実行される
def test_sub():
print('test_sub()')
このモジュールをインポートすると、即座に print が実行され、test_sub() が定義される。2.4 main.py の実行結果
実行結果
sub
test_sub()2.5 複数回インポート
コード
import sub
import sub
import sub
sub.py のトップレベルのコードは、1度だけ実行されます。3. 同じ階層のモジュールのワイルドカードインポート
関数やクラスなどをまとめてインポートします。
但し、先頭がアンダースコアで始まる物は除外されます。
但し、先頭がアンダースコアで始まる物は除外されます。
3.1 フォルダ構成
フォルダ構成
プロジェクトフォルダ
├─ main.py
└─ sub.py3.2 main.py
コード
from sub import * # sub モジュールの関数などをまとめてインポート
test_sub()
# _test_sub2() : エラー : アンダースコアで始まる物はインポートされない3.3 sub.py
コード
def test_sub():
print('test_sub()')
# ワイルドカードインポートでは除外される
def _test_sub2():
print('_test_sub2()')4. ワイルドカードインポートの対象の指定
__all__ に指定した物だけがワイルドカードインポートでインポートされます。
指定すれば、アンダースコアで始まる物もインポート可能。
指定すれば、アンダースコアで始まる物もインポート可能。
4.1 フォルダ構成
フォルダ構成
プロジェクトフォルダ
├─ main.py
└─ sub.py4.2 main.py
コード
from sub import *
test_sub()
test_sub2()
# test_sub3() # エラー : sub の__all__ に指定されていないため、インポートされていない4.3 sub.py
コード
__all__ = [
'test_sub',
'test_sub2'
]
def test_sub():
print('test_sub()')
def test_sub2():
print('test_sub2()')
def test_sub3(): # __all__ に指定されていないため、インポートされない
print('test_sub3()')5. 異なる階層のモジュールのインポート
5.1 フォルダ構成
フォルダ構成
プロジェクトフォルダ
├─ main.py
└─ pkg1
└─ pkg1_sub.py5.2 main.py
コード
import pkg1.pkg1_sub
pkg1.pkg1_sub.test_pkg1_sub()5.3 pkg1_sub.py
コード
def test_pkg1_sub():
print('test_pkg1_sub()')5.4 main.py の実行結果
実行結果
sub
test_sub()5.5 from を使ったインポート
import pkg1.pkg1_sub としてインポートした場合は、
関数を呼び出す時は、
pkg1.pkg1_sub.test_pkg1_sub() のように書く必要がありますが、
from を使うと短縮できます。
または
のように書くことができます。
関数を呼び出す時は、
pkg1.pkg1_sub.test_pkg1_sub() のように書く必要がありますが、
from を使うと短縮できます。
コード
from pkg1 import pkg1_sub
pkg1_sub.test_pkg1_sub()
または
コード
from pkg1.pkg1_sub import test_pkg1_sub
test_pkg1_sub()
のように書くことができます。
5.6 補足
以前はフォルダ直下に __init__.py と言うファイルを置くと、フォルダがパッケージとして認識されました。
現在は、__init__.py がなくても、パッケージとして認識されます。
また、__init__.py を置いて、そのパッケージをインポートした場合は、現在も __init__.py のコードは実行されます。
現在は、__init__.py がなくても、パッケージとして認識されます。
また、__init__.py を置いて、そのパッケージをインポートした場合は、現在も __init__.py のコードは実行されます。
6. モジュールをインポートしているモジュールのインポート
6.1 フォルダ構成
フォルダ構成
プロジェクトフォルダ
├─ main.py
├─ sub.py
└─ sub2.py6.2 main.py
コード
from sub import *
test_sub() # 動く
test_sub2() # 動く6.3 sub.py
コード
from sub2 import *
def test_sub():
print('test_sub()')
sub2 の関数を全て読み込んでいるため、外部からは、sub2 の関数が sub に定義されているように見える。
6.4 sub2.py
コード
def test_sub2():
print('test_sub2()')7. パッケージのインポート
7.1 フォルダ構成
フォルダ構成
プロジェクトフォルダ
├─ main.py
└─ pkg1
├─ __init__.py
└─ pkg1_sub.py7.2 main.py
コード
import pkg1
test_pkg1_sub()7.3 pkg1_sub.py
コード
def test_pkg1_sub():
print('test_pkg1_sub()')
def test_pkg1_sub2():
print('test_pkg1_sub2()')7.4 __init__.py
コード
__all__ = [
'test_pkg1_sub'
]
from pkg1.pkg1_sub import *
パッケージをインポートした時の、エクスポートする関数を指定します。8. as で別名を付ける
as で別名を付けることで、深い階層にあるモジュールや長い名前のモジュールを短縮することができます。
コード
import pkg1.pkg1_sub as sub
sub.test_pkg1_sub()
