Pythonのimport文のわかりやすい使い方
- 作成日: 2021-07-05
- 更新日: 2023-12-24
- カテゴリ: Python
Pythonのimport文のわかりやすい使い方
Pythonでは他のモジュールやパッケージをimport文を使ってインポートすることができます。
import文を覚えてモジュールを分割すれば大規模な開発に対応することが可能です。
結論から言うとimport文は↓のように使います。
# オーソドックスなモジュールのインポート
import mod
# パッケージ以下のモジュールをインポート
import animals.cat
# インポートしたモジュールに別名をつける
import mod as mymod
# fromでパッケージからモジュールをインポート
from animals import cat
# fromで複数のモジュールをインポート
from animals import cat, dog
from animals import (
cat,
dog,
)
# fromでモジュール内の関数をインポート
from mod import (
func1,
func2,
)
この記事ではimport文について具体的に↓を見ていきます。
- 解説の前提とするディレクトリ構造
- パッケージ、モジュールとは?
- パッケージ、モジュールのインポートとは?
- import文の構造
- importでパッケージ、モジュールをインポート
- fromを使ったインポート
- インポートしたモジュールに別名(エイリアス)をつける
解説の前提とするディレクトリ構造
今回の解説で前提とするディレクトリ構造は↓になります。
.
├── animals
│ ├── __init__.py
│ ├── cat.py
│ └── dog.py
└── mod.py
animals
はディレクトリで、__init__.py
, cat.py
, dog.py
, mod.py
はファイルです。
cat.py
は↓のように定義されています。
def nyan():
pass
def gorogoro():
pass
パッケージ、モジュールとは?
パッケージとは、おおざっぱに言うとディレクトリのことです。
このディレクトリには__init__.py
が含まれることもあります。
モジュールとはimport文でインポートできるファイルやディレクトリのことを言います。
パッケージはモジュールを持つことができますが、モジュールがパッケージを持つことはできません。
パッケージ内にはモジュールが複数含まれていて、それら全体を指してパッケージと言います。
パッケージは特殊なモジュールと言い換えることも出来ます。
たとえば先ほどの↓のディレクトリ構造の場合、
animals
├─ __init__.py
├─ cat.py
└─ dog.py
↑の場合、animals
はディレクトリでパッケージです。
そして__init__.py
やcat.py
, dog.py
はモジュールと呼ばれます。
cat.py
やdog.py
の中には関数やクラスなどが記述されています。
インポートの目的はこれらの関数やクラスをファイルをまたいで使えるようにすることです。
__init__.py
はマーキングのようなもので、このモジュールがあるとPythonはそのディレクトリをパッケージとして認識します。
__init__.py
にはそのディレクトリをインポートしたときの振る舞いなどの設定を記述することができます。
Pythonがディレクトリを認識してくれない時は、このモジュールを定義すると認識してくれることが多いです。
パッケージ、モジュールのインポートとは?
プロジェクトでは多数の関数やクラスなどが作成されます。
それらのオブジェクトを1つのファイルに記述するのはメンテナンスの面から言ってあまり現実的ではありません。
そのため通常はファイルを分割してモジュールにして、そのモジュールの中に関数やクラスなどを配置します。
import文はそれらのオブジェクトをファイルの中に取り込むための文です。
分割されたパッケージやモジュールがあって、それらのオブジェクトをインポートしたい時に使います。
animals
├─ __init__.py
├─ cat.py
└─ dog.py
具体的に言うと↑で、cat.py
に定義されている関数やクラスをファイルに取り込みたい場合にimport文を使います。
import文の構造
Pythonのimport文の構造はPythonのBNFから参照することができます。
↑のBNFのimport_stmt
というのがimport文のことです。
これはimport_name
とimport_from
に別れています。
import_name
で記述できるコード例は↓の通りです。
import animals
import animals.cat
import animals.cat, animals.dog
import animals as anims
import_from
で記述できるコード例は↓のようになります。
from animals import cat
from animals import cat as c
from animals import cat, dog
from animals import (
cat,
dog,
)
from mod import func1 as f1, func2 as f2
from mod import (
func1 as f1,
func2 as f2,
)
importでパッケージ、モジュールをインポート
import
文でパッケージをインポートするには↓のようにします。
import animals
print(animals)
# <module 'animals' from '/path/to/animals/__init__.py'>
↑のようにインポートしたオブジェクトはprint()
などを使って参照することができます。
animals
のディレクトリ以下にはcat.py
とdog.py
がありますが、このままだとcat.py
やdog.py
を参照できません。
ドットで繋げてcat
にアクセスしようとすると↓のようなエラーになります。
try:
print(animals.cat)
except AttributeError as e:
print(e)
# module 'animals' has no attribute 'cat'
これはanimals
の正体がanimals/__init__.py
だからです。
__init__.py
の中は空っぽなので、cat
という属性も存在しないことになります。
このインポート方法でanimals.cat
を参照したい場合は__init__.py
の中に↓のようなコードを書きます。
from animals import cat
↑のように__init__.py
を定義するとanimals.cat
で参照できるようになります。
あるいは↓のようにインポートしてもcat
にアクセスできます。
import animals.cat
print(animals.cat)
# <module 'animals.cat' from '/path/to/animals/cat.py'>
↑の場合はインポートした識別子がanimals.cat
になります。そのためcat
単独でアクセスすることはできません。
エイリアスを付ければ問題ないですが、それについては後述します。
またインポートでは一度に複数のモジュールをインポートできます。
カンマ(,
)で区切ってパッケージやモジュールを指定します。
import mod, animals
インポートしたモジュールからモジュール内の関数にアクセスすることができます。
import animals.cat
print(animals.cat.nyan)
# <function nyan at 0x1234>
fromを使ったインポート
from
を使ったインポート方法についてです。
from
は↓のように使います。
from animals import cat
print(cat)
# <module 'animals.cat' from '/path/to/animals/cat.py'>
↑のfrom animals import cat
というインポート文を日本語にすると「animals
というパッケージからcat
というモジュールをインポートする」という意味になります。
↑のインポート方法だとcat
を直接参照することができます。
from
を使うとモジュールから関数などをインポートできます。
from animals.cat import nyan, gorogoro
print(nyan)
# <function nyan at 0x1234>
print(gorogoro)
# <function gorogoro at 0x1234>
from
を使ったインポートでは↓のようにimport
文にカッコを使うことができます。
from animals.cat import (
nyan,
gorogoro,
)
カッコを使った場合、↑のように複数行に渡ってimport
文を書くことができます。
インポートしたモジュールに別名(エイリアス)をつける
インポートしたモジュールには別名(エイリアス)を付けることができます。
エイリアスはas
に続けて書きます。
たとえばanimals
というパッケージ(モジュール)にエイリアスを付けたい場合は↓のようにします。
import animals as anims
print(anims)
# <module 'animals' from '/path/to/animals/__init__.py'>
↑の場合、animals
のエイリアスがanims
になります。
エイリアスを付けて参照先は↑のように変わりません。
もちろん出来ることも元のanimals
の場合と同じです。
エイリアスはただ単に呼び方を変えているにすぎません。
名前の衝突などが発生した場合に使われることがあります。
from
の場合もエイリアスは付けられます。
from animals import cat as c
from animals import (
cat as c,
dog as d,
)
おわりに
今回はPythonのimport文について見てみました。
import文を使えるようになると複数のモジュールをまたいだ開発も可能になります。
🦝 < 他のファイルから輸入しよう