読み飛ばしてください
Python、いいですよね。
Pythonを使うということはimport
もたくさん使うことになると思いますが、
かなり重要で理解が必要な機能の一部です。
単なるコードの再利用以上の意味を持っていて、結構いろいろ覚えておくといいことがあるので、
まとめてみました。
importの基本
モジュールとは何か
めちゃくちゃ基本から始めます。
Pythonにおいて、モジュールとは単にPythonファイル(.py)のことを言います。
モジュールには関数、クラス、変数などが含まれており、これらを他のPythonプログラムで再利用することができます。
importの基本的な構文
最も基本的なimport
の構文はこれです。
import モジュール名
これで、指定したモジュール全体をインポートすることができます。
importのメカニズム
Pythonがモジュールを探す仕組み
Pythonは以下の順序でモジュールを探します。
- 現在のディレクトリ
- PYTHONPATH環境変数で指定されたディレクトリ
- Pythonの標準ライブラリのディレクトリ
sys.pathの役割
sys.path
は、Pythonがモジュールを探すディレクトリのリストです。import sys
を行い、print(sys.path)
を実行することで、現在のsys.path
の内容を確認することができます。
importの種類と使い方
import文
import math
この方法でインポートすると、math.sin()
のように、モジュール名を接頭辞として使用する必要があります。
from ... import文
from math import sin, cos
この方法では、指定した関数や変数を直接使用できます(例:sin(0)
)。
使うオブジェクトが絞られているなら、これを使う方が名前空間が汚染されないのでおすすめです。
as キーワードを使った別名インポート
import numpy as np
この方法で、長いモジュール名に短い別名をつけることができます。
この場合、np.array()
のように自分で付けた別名で使用できるようになります。
便利なのでよく使います。
パッケージとimport
パッケージの構造
パッケージは、複数のモジュールをまとめて管理するための仕組みです。
pipとかでインストールするアレです。
よくモジュールとパッケージが混同されがちですが、実際には
モジュールをまとめたものがパッケージなわけです。
ディレクトリ構造を使って表現され、各ディレクトリには__init__.py
ファイルが必要です。
init.pyの役割
__init__.py
ファイルは、そのディレクトリがPythonパッケージであることを示します。
また、パッケージのインポート時に実行されるコードを含むこともできます。
パッケージを作るわけでもない限り、あまり気にしたくても大丈夫なやつです。
importのベストプラクティス
効率的なimportの書き方
必要なものだけをインポートする
必要最小限のインポートにすることで、名前空間の汚染を防ぎ、メモリ使用量を抑えることができます。
また、コードの可読性も向上します。
依存関係のエラーも減ると思います。
import *
の使用を避ける
import *
を使用すると、どの名前がインポートされたのかが不明確になり、意図しない名前の上書きが発生する可能性があります。
普通に危険です。
PEP 8のimportに関するガイドライン
インポートは通常ファイルの先頭に置く
ファイルの先頭にインポートを置くことで、そのモジュールが依存している外部リソースを一目で確認できます。
また、循環インポートの問題を早期に発見しやすくなります。
インポートは以下の順序で行う
- 標準ライブラリ
- サードパーティライブラリ
- ローカルアプリケーション/ライブラリ
この順序でインポートを行うことで、依存関係の優先順位が明確になります。
また、ローカルの変更が標準ライブラリやサードパーティライブラリのインポートに影響を与えることを防ぎます。
意外とやっていない人が多いので意識すると良いと思います。
最後に
Pythonのimportについてまとめました。
他にもいろいろ知りたい方は、こちらをどうぞ。