- ライブラリのインポート方法が知りたい!
Python ではインポートを行うことで、機能拡張ができます。
本記事ではインポートに必要な知識を網羅的に解説します。
インポートの基本的な書き方
インポートの基本
インポートの方法には2つのパターンがあります。
- 標準ライブラリのインポート
- サードパーティライブラリのインポート
手順がやや異なるので、一つずつ解説します。
標準ライブラリのインポート
Python に標準でついてくるライブラリのインポートは、コードの先頭で以下のように書きます。
import os
# 新しいディレクトリを作成する
new_dir = "path/to/newdir"
os.mkdir(new_dir)
5行目のos.mkdir()
はos
モジュールの機能を利用しているので、1行目のインポート文を書かないとエラーになります。
サードパーティライブラリのインポート
Python に標準搭載されていないライブラリを「サードパーティライブラリ」と呼びます。
この場合は、まずライブラリをインストールする必要があります。
以下のコマンドをターミナルなどのコンソール上から実行すると、ライブラリがインストールされるはずです。
pip install requests
その後にモジュール内でインポートを行いましょう。
import requests
# URLを指定
url = "https://www.example.com"
# GETリクエストを送信
response = requests.get(url)
# HTTPレスポンスコードを出力
print("Status Code:", response.status_code)
# レスポンスボディをテキストとして出力
print("Response Body:", response.text)
最初から入っていないライブラリは、インストールが必要と覚えておきましょう。
複数モジュールをインポートする方法
PEP8 というルールによれば、複数モジュールをインポートする場合には1行ずつ分けて書くことになっています。
# 良い例
import glob
import os
以下はエラーにはならないが、非推奨です。
# 悪い例
import glob, os
インポートする順番について
モジュールのインポートは改行でグループ分けしてインポートするのが通例です。
- 標準ライブラリ
- サードパーティライブラリ
- 自作ライブラリ
例えば以下のような感じになります。
import glob
import os
import requests
import library1
import library2
より読みやすいように、ライブラリ名の頭文字を基準としてアルファベット順に並べることもあります。
ただしアルファベット順に並べるのはかなり大変なので、isort
というフォーマッたを使って自動整形させることが多いです。
一部の関数やクラスだけをインポート
以下のように書くことで、モジュールの一部のみをインポートできます。
from os import mkdir
# 新しいディレクトリを作成する
new_dir = "path/to/newdir"
mkdir(new_dir)
複数の関数をインポートするには、カンマ区切りにします。
from os import mkdir, path
# 新しいディレクトリを作成する
base_dir = "path/to/newdir"
new_dir = path.join(base_dir, "joindir")
mkdir(new_dir)
別名をつけてインポートする
ライブラリ名が長い場合などには、別名をつけると呼び出しが簡単です。
import pandas as pd
# DataFrame を新規作成
df = pd.DataFrame()
ただしこの場合には別名での呼び出ししかできず、pandas としてもエラーになります。
if __name__ == “__main__” って何者?
モジュールの最後の方に、以下のコードが書かれている場合があります。
if __name__ == "__main__":
print("本モジュールが実行されました。")
上記のモジュールを「直接」を実行した場合だけ、if
節内が実行されます。
地味に重要なのが、__name__
はプロパティであり"__main__"
は文字列だということです。
__name__
の意味
特定のモジュール名のプロパティとして__name__
を実行すると、そのモジュール名が取得できます。
つまり、以下の例でprint(os.__name__)
の実行結果はos
となります。
import os
# 実行結果は "os" となる
print(os.__name__)
一方で、以下のようなprint()
関数だけが存在するコードを考えてみましょう。
print(__name__)
ファイル名をmodule1.py
とします。
実は、__name__
の内容は状況によって結果が異なります。
- module1.pyが直接実行された場合
- 他のモジュールから呼び出された場合
それぞれ説明します。
module1.py が直接実行された場合
module1.py は、以下のようなprint()
関数だけが書かれたものでした。
print(__name__)
以下のように、module1.pyが直接実行されたとします。
python module1.py
すると、print(__name__)
の実行結果は"__main__"
になります。
他のモジュールから呼び出された場合
例えば、以下のようなmodule2.pyがあったとします。
import module1
そして、先ほどとは異なり以下のコマンドを実行したとします。
python module2.py
すると、module2.pyが実行されることで、import 文を通して間接的にmodule1.pyが実行されることになります。
この場合にはprint(__name__)
の実行結果は"module1.py"
となります。
そのモジュール自体が実行された場合に実行される
そのモジュール自体が実行された場合のみ、__name__
は__main__
になります。
if __name__ == "__main__":
print("本モジュールが直接実行されました。")
if __name__ == “__main__” を使うメリット
if
節内に書いたコードに以下の役割を持たせられます。
- デバッグ用コード
- デモ用コード
- テスト用コード
これらは他のモジュールから呼び出された時には実行されないので、スタンドアロンのスクリプトとしてもモジュールとしても使えます。
import 文の書き方をマスターして可読性を上げよう!
Python のインポートの基礎をご紹介してきました。
本記事でご紹介してきた書き方をマスターいただければ、基本的な書き方としては完璧かと思います。
本ブログでは Python 関連の記事も順次アップしておりますので、ぜひ他記事もご覧になってみてください。
コメント