Import文を使ってパッケージやモジュールをプログラムに取り込む
記事の内容
この記事では、Pythonのimport文の基本について説明します。import文を使うと、パッケージやモジュールを自分のプログラムに取り込み、中で定義された関数やクラスを利用することができるようになります。
補足
モジュールとは、Pythonのソースコードファイルのことです。
パッケージとは、1つ以上のモジュールで構成されるプログラムが保存されたフォルダのことです。パッケージはフォルダなので、データファイルや設定ファイルなど、プログラム以外のファイルも保存できます。
別のモジュールから呼び出して繰り返し利用することを目的としたパッケージやモジュールのことを、ライブラリとよびます。ライブラリの中身は、別モジュールから再利用するための関数、クラス、変数などのオブジェクトで構成されるプログラムです。
***わからない用語があるときは索引ページへ***
1.import文の書式
1.1.パッケージ、モジュールをインポートする
ライブラリのプログラムは、import文を使ってパッケージ、またはモジュール、または個別関数/クラスの単位で自身のプログラムに取り込むことができます。
import文を使ったパッケージやモジュールの取り込みは、
import <パッケージ名、またはモジュール名>
の規則で記述します。
import文で指定するパッケージやモジュールは、Pythonのインタープリタから参照可能である必要があります。詳細についてはこの記事の後ろで説明します。
標準ライブラリで用意されているパッケージやモジュール、およびPythonインタープリタにインストール済みの外部パッケージやモジュールは、保存場所を気にすることなく自身のプログラムファイルから参照可能となっています。
以下、標準ライブラリのパッケージ、モジュールを使ったimport文の例です。
import文の実例:
##datetimeモジュールのインポート
import datetime
##urllibパッケージのインポート
import urllib
パッケージで提供されているライブラリの中の特定のモジュールをインポートしたい場合は、パッケージとモジュールを"."(ドット)で区切って
import <パッケージ名>.<モジュール名>
の規則で記述します。
import文の実例:
##urllibパッケージのrequestモジュールをインポート
import urllib.request
プログラムの中で利用するのは、モジュールで定義されたクラスや関数です。パッケージ、モジュールをインポートしてこれらのクラスや関数を利用する場合は、
<パッケージ名>.<モジュール名>.<関数名またはクラス名>
<モジュール名>.<関数名またはクラス名>
の形式で呼び出します。
モジュールのimportとクラスまたは関数の呼び出し例1
##datetimeモジュールのインポート
import datetime
##datetimeモジュールのdatetimeクラスを呼び出す
current_time = datetime.datetime.now()
モジュールのimportとクラスまたは関数の呼び出し例2
##urlibパッケージのインポート
import urllib
##urllibパッケージのrequestモジュールのurlopen関数を呼び出す
http_response = urllib.request.urlopne("https://www.yahoo.co.jp")
1.2.クラス、関数などのオブジェクトをインポートする
モジュールの中の個別の関数、クラス、変数(インスタンス)などのオブジェクトをインポートする場合は、
from <モジュール名> import <オブジェクト名>
from <パッケージ名>.<モジュール名> import <オブジェクト名>
の形式でインポートします。
##datetimeモジュールのdatetimeクラスのインポート
from datetime import datetime
##urllibパッケージの中のrequestモジュールのurlopen関数のインポート
from urllib.request import urlopen
##datetimeクラスを呼び出す
now = datetime.now()
##urlopen関数を呼び出す
http_response = urlopne("https://www.yahoo.co.jp")
from句を使って個別のオブジェクトをインポートした場合は、同じモジュールの中で定義したオブジェクトと同じように、直接クラス名、関数名、変数名、インスタンス名で呼び出すことができます。
1.3.importしたオブジェクトに別名をつける(as句)
import文の最後に
import <モジュール> as <別名>
from <モジュール> import <クラス名/関数名> as <別名>
のように、インポート文の最後にas句をつけることで、インポートするオブジェクトに別名をつけることができます。
import文でのas句の利用例1
##datetimeモジュールをインポートして別名dtをつける
import datetime as dt
##datetimeモジュールを別名で呼び出す
now = dt.datetime.now()
import文でのas句の利用例2
##datetimeモジュールのdatetimeクラスをインポートして別名dtをつける
from datetime import datetime as dt
##datetimeモジュールを別名で呼び出す
now = dt.now()
2.参照可能なモジュールへのパスについて
2.1.sys.pathでPythonインタープリタが参照可能なフォルダの一覧を確認する
import文で指定するパッケージやモジュールは、Pythonのインタープリタから参照可能なフォルダに保存されている必要があります。Pythonインタープリタから参照可能なフォルダには、
(1)プログラムファイルが保存されたフォルダ
(2)標準ライブラリのフォルダ
(3)Pythonインタープリタにインストールした外部パッケージやモジュールが保存されたフォルダ
(4)Pythonインタープリタにビルトインのモジュール(OSのファイルシステムからは見えないと思います)
(5)OSの環境変数にパスがセットされたフォルダ
などがあります。
これらPythonのインタープリタから参照可能なフォルダのパスは、Pythonのsysモジュールのリストオブジェクトであるsys.pathで確認することができます。
せっかくなのでsys.pathの中身をのぞいてみましょう。
import sys
print(sys.path)
実行結果
['E:\\pleiades\\workspace\\TestProject\\Kisohen', 'E:\\pleiades\\workspace\\TestProject', 'E:\\pleiades\\python\\3\\DLLs', 'E:\\pleiades\\python\\3\\lib', 'E:\\pleiades\\python\\3', 'E:\\pleiades\\python\\3\\lib\\site-packages', 'E:\\pleiades\\python\\3\\python37.zip']
私のプログラミング環境である、Windows10のPydev-Eclipseでは、上記のような出力結果になりました。プログラミング環境によって、異なります。
2.2.sys.pathにパスを追加して任意のフォルダのパッケージやモジュールをインポートできるようにする
sys.pathにフォルダのパスを追加すると、Pythonインタープリタはそのフォルダのパッケージやモジュールをインポートできるようになります。sys.pathはリストオブジェクトですので、リストオブジェクトのappendメソッドで任意のパスを追加することができます。
##sysモジュールのインポート
import sys
##sys.pathにパスを追加する
##c:\path\to\folderのモジュールをimprt可能になる
sys.path.append(r'c:\path\to\folder)
sys.pathにパスを追加することによって、そのパスのモジュールがインポート可能になります。ただし、sys.path.append(<パス>)で追加したパスは、そのプログラムファイル(モジュール)でのみ有効です。
別のプログラムファイルから呼び出す場合は、同じようにsys.pathにライブラリのパスを追加しなければなりません。
自分自身で作成したライブラリモジュールをインポートしたいときなどにsys.path.appendで使います。
私がプログラミング環境として使っているPyDev-Eclipseの場合は、上記に加えて以下のフォルダがsys.pathにセットされています。
(1)プログラムファイルが作成されるプロジェクトのプロジェクトフォルダ
(2)プロジェクトフォルダ内にソースフォルダとして作成したフォルダ
3.モジュールの中のオブジェクト一覧を取得する
dir関数を使って、モジュールのオブジェクト(変数、インスタンス、関数、クラスなど)の一覧を取得することができます。インポートしたモジュールの中身を見ることができ、便利です。
試しにdatetimeモジュールのオブジェクトを出力してみましょう。
import datetime
print(dir(datetime))
出力結果
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo']
この記事が気に入ったらサポートをしてみませんか?