Pythonのモジュールについて抑えておくべき知識とよく使うもの一覧

Pythonに、標準でインストールされている関数だとしても、組み込み関数以外の関数を使うには、先にモジュールを読み込む必要があります。

この「モジュールとは何か?」を理解しておくと、学習の効率が早まります。また、Python では、沢山のモジュールが用意されているということを知っておくことで、将来、必要が出てきた時に、使える関数を自力で見つけられるようにもなります。

そのためにも、ここで詳しく解説しておきたいと思います。

目次

1. Pythonのモジュールとは

1.1. モジュールとは「部品」のこと

モジュールとは、元々は、家を立てたり、家具を作ったりする時の、一つ一つの部分(パーツ)のことです。建築の際は、あらかじめ書いている図面の通りに、パーツを作っていき、最後に、それらのパーツを組み合わせて完成させます。

プログラミングもこれと同じで、パーツ毎にファイルを分けて、一つずつ完成させていきます。

例えば、図のようなシンプルなブログを作る時を考えてみましょう。これは、

  • ヘッダー
  • ポスト
  • サイドバー
  • フッター

の 4 つのパーツから成り立っていますね。

このような時は、それぞれのパーツ毎に、別のファイルを作り、一つずつ完成させていきます。そして、最後に、それぞれのファイルを組み込み、 1 つのブログを完成させます。

もし、このようにパーツごとに、ファイルを分けずに、全てのコードが 1 つのファイルに書かれているとします。そして、完成間近というところで、重大なエラーが発生しました。この場合、10,000 行の中から、問題を起こしている 1 行を突き止める必要があります。

それはとてもとても大変です。

しかし、パーツ毎にファイルを作っていれば、エラーの内容から、どこでエラーが起きているのかが分かり、原因箇所の解明が遥かに迅速になります。こうした利点があるため、プログラマーは、大きなプログラムを、部品ごとに、別ファイルに分解して書いていきます。

1.2. Python は機能別に分けてファイル(モジュール)を用意している

ブログは、それを構成する “パーツ毎” にファイルを分けて作っています。

Python では、” 機能毎 ” にファイルが分けられています。例えば、「計算機能をまとめたファイル」「カレンダー機能をまとめたファイル」という具合です。そして、そのように機能ごとに分割されたファイルを「モジュール」といいます。

それぞれのモジュールに置かれている機能(関数)は、下図のように、Python にモジュールを読み込ませることで使えるようになります。

このように、「標準ライブラリ」というところにあるモジュールを引っ張ってきて、Python に読み込ませる ( import といいます)ことで、より多くの関数を使えるようになります。「標準ライブラリ」は、シンプルに、Python のモジュールの保管場所とされている図書館とお考えください。

これらのモジュールを使いこなすことによって、語弊を恐れずに言えば、Python でほぼ何でも行えるようになります。

例えば、math モジュールというものがあります。

math モジュールには、数学的な計算を、楽に実行するための多くの関数が用意されています。これらの関数を使うと、通常の組み込み関数だけでは、不可能な計算もできるようになります。例えば、以下のように、距離と角度から高さを計算する、などです。

このような場合で、高さを求めるには、次のようなコードを書くことができます。ここでは、距離は20m、角度は32度とします。

In [2]:
import math #mathモジュールを読み込んでいます。
kyori = 20
kakudo = math.radians(32) #角度をラジアンに換算
takasa = kyori * math.tan(kakudo) #高さを計算
takasa = math.floor(takasa * 100)/100 #小数点以下第2位を切り捨て
print(str(takasa) + "m") #計算結果を文字列に変換して出力 
12.49m

コードの内容を理解する必要は全くありませんのでご安心ください。ここでは、「モジュールを使いこなせるようになると、組み込み関数以外の様々な関数を使えるようになり、プログラミングで出来ることが飛躍的に増える」ということを実感して頂ければ十分です。

2. モジュールをインポートする方法と関数の使い方

それでは、ここから、モジュールをインポートして、そのモジュールの関数を使う方法を解説していきます。

方法は 4 つあります。

  1. モジュール全体をインポートする。
  2. モジュール全体を別名をつけてインポートする。
  3. モジュールから特定の関数だけをインポートする。
  4. モジュールから特定の関数だけを別名をつけてインポートする。

最初は 1. と 3. だけ抑えておくだけでも十分だと思います。また、それぞれの項で、関数を使う方法も一緒に解説しています。

それでは見ていきましょう。

2.1. モジュール全体をインポートする

まずは、最も基本的なインポート方法です。以下をご覧ください。

In [0]:
'''モジュールのインポートの書式'''
import モジュール名, モジュール名

このように、import と書いてから、読み込みたいモジュール名を入力するだけです。同時に複数のモジュールをインポートしたい場合は、カンマで区切って、続けて入力します。

インポートしたモジュールの関数を使うには、次のように書きます。

In [0]:
'''インポートしたモジュール内の関数を使う時の書式'''
モジュール名.関数名()

組み込み関数を使う時と違って、関数名の前にモジュール名を書き、ドットで繋ぎます。

それでは、例を見ていきましょう。擬似乱数を作成する関数が豊富に揃っている random モジュールをインポートします。

In [1]:
'''random モジュールを読み込みます。'''
import random
 
'''randomモジュールの関数を使うには、 'random.関数名()' と書きます。'''
random.randint(1, 10)
Out[1]:
8

randint 関数は、引数に指定した数値の範囲で、ランダムに整数を返す関数です。簡単ですね。

2.2. モジュール全体を別名をつけてインポートする

これは、自分で新たなモジュールを作った場合で、自作したモジュールの名前が、既に存在するモジュール名と被る時ぐらいしか使わないと思います。つまり非常にレアケースの場合のみということですね。

しかし、念のため解説しておきたいと思います。

次のように書くと、モジュールに別名をつけてインポートすることができます。

In [0]:
'''インポートするモジュールに別名をつける場合の書式'''
import モジュール名 as 別名

モジュールに別名をつけたので、その中の関数を使うには、最初に別名を入力します。

In [1]:
'''random モジュールに rand という別名をつけてインポートします。'''
import random as rand
 
'''この場合、そのモジュール内の関数を使うには '別名.関数名()'と書きます。'''
rand.randint(1, 10)
Out[1]:
2

2.3. モジュールから特定の関数だけをインポートする

モジュール全体ではなく、そのモジュールから特定の関数だけをインポートすることもできます。

次のように書きます。

In [0]:
'''モジュールから使いたい関数だけをインポートする時の書式'''
from モジュール名 import 関数名

特定の関数だけをインポートした場合は、その関数を使う時に、先頭にモジュール名をつける必要がなくなります。

In [1]:
'''randint 関数だけをインポートします。'''
from random import randint
 
'''この場合、行頭にモジュール名をつけなくても関数を使用できます。'''
randint(1, 10)
Out[1]:
9

インポートした関数を、何度も使用する際は、こちらの方が便利ですね。

2.4. モジュールから特定の関数だけを別名をつけてインポートする

特定の関数だけをインポートする場合も、その関数に別名をつけることができます。

これは、自作した関数と、インポートしたい関数の名前が被ってしまっている場合に有効です。このようなケースは、時に起こりますので、覚えておくと良いでしょう。

次のように書きます。

In [0]:
'''インポートした関数の名前を帰る時の書式'''
from モジュール名 import 関数名 as 別名

以下が使用例です。

In [1]:
'''randint 関数に別名をつけてインポートします。'''
from random import randint as rand
 
'''この場合も行頭にモジュール名は不要です。'''
rand(1, 10)
Out[1]:
8

3. Python で用意されているモジュール一覧

ここから、Python で現在用意されているモジュールの一覧を列挙しています。これらは全て Python の公式ドキュメントの「Python 標準ライブラリ」のページで、列挙、解説されています。ただし、普段、どのようなモジュールがあるのかを、改めて時間を取って見てみることはあまりないと思います。

そこで、ここでサッと眺めてみるのも良いかと思い掲載することにしました。きっと沢山のモジュールがあることに驚くことでしょう。

もちろん、全てのモジュールを知っておく必要はありません。必要になった時に、自分で調べてみて、その中に、有用な関数があるかどうかを調べられるようになることが重要です。

それでは見ていきましょう。

3.1. テキスト処理モジュール

モジュール名  役割
string  一般的な文字列操作
re  正規表現操作
difflib  差分の計算の補助
textwrap  テキストの折り返しと詰め込み
unicodedata  Unicode のデータベース
stringprep  文字列調整
readline  GNU readline のインターフェイス
rlcompleter  GNU readline 向けの補完関数

3.2. 数値と数学モジュール

モジュール名  役割
numbers  数の抽象基底のクラス
math  数学関数
cmath  複素数の数学関数
decimal  十進数と浮動小数点数の算術関数
fractions  有理数
random  擬似乱数の生成
statistics   数理統計の関数

3.3. データ型モジュール

モジュール名  役割
datetime  基本的な日付型と時間型
calendar  一般的なカレンダーに関する関数群
collections  コンテナデータ型
collections.abc  コレクションの抽象基底クラス
heapq  ヒープキューアルゴリズム
bisect  配列二分法アルゴリズム
array  効率の良い数値アレイ
weakref  弱参照
types  動的な型生成と組み込み型に対する名前
copy  浅いコピーと深いコピーの操作
pprint  データ出力の整然化
reprlib  もう一つの repr() の実装
enum  列挙型のサポート

3.4. バイナリデータ処理モジュール

モジュール名  役割
struct  バイト列をパックされたバイナリデータとして解釈
codecs  codec レジストリと基底クラス

3.5 関数型プログラミング用モジュール

モジュール名  役割
itertools  効率的なループ実行のためのイテレータ生成関連
functools  高階関数と呼び出し可能なオブジェクトの操作
operator  関数形式の標準演算子

3.6. ファイルとディレクトリへのアクセス

モジュール名  役割
pathlib  オブジェクト指向のファイルシステムパス
os.path  共通のパス名操作
fileinput  複数の入力ストリームを跨いだ行の繰り返し処理のサポート
stat  stat() の結果の解釈
filecmp  ファイルやディレクトリの比較
tempfile  一時ファイルやディレクトリの作成
glob  Unix 形式のパス名のパターン展開
fnmatch  Unix ファイル名のパターンマッチ
linecache  テキストラインにランダムアクセスする
shutil  高水準のファイル操作
macpath  Mac OS 9 のパス操作関数

3.7. データの永続化

モジュール名  役割
pickle  Python オブジェクトの直列化
copyreg  pickle サポート関数の登録
shelve  Python オブジェクトの永続化
marshal  内部使用者向けの Python オブジェクト整列化
dbm  Unix データベースへのインターフェイス
 sqlite3  SQLite データベースに対する DB-API 2.0 インターフェイス

3.8. データ圧縮とアーカイブ

モジュール名  役割
zlib  gzip 互換の圧縮
gzip  gzip ファイルのサポート
bz2  bzip2 圧縮のサポート
lzma  LZMA アルゴリズムを使用した圧縮
zipfile  ZIP アーカイブの処理
 tarfile  tar アーカイブファイルの読み書き

3.9. ファイルフォーマット

モジュール名  役割
csv  CSVファイルの読み書き
configparser  設定ファイルのパーサー
netrc  netrc ファイルの処理
 xdrlib  XDRデータのエンコードとデコード
 plistlib  Mac OS X .plist ファイルの生成と解析

3.10. 暗号関連のサービス

 モジュール名  役割
hashlib  セキュアハッシュおよびメッセージダイジェスト
hmac  メッセイジ認証のための鍵付きハッシュ化
secrets  機密を扱うために安全な乱数を生成する

3.11. 汎用オペレーティングシステムサービス

モジュール名  役割
os  雑多なオペレーティングシステムインターフェイス
io  ストリームを扱うコアツール
time  時刻データへのアクセスと変換
argparse  コマンドラインオプション、引数、サブコマンドのパーサー
getopt  C 言語スタイルのコマンドラインオプションパーサー
logging  Python 用ロギング機能
logging.config  ロギングの環境設定
logging.handlers  ロギングハンドラ
getpass  可搬性のあるパスワード入力機構
curses  文字セル表示を扱うための端末操作
curses.textpaad  curses プログラムのためのテキスト入力ウィジェット
curses.ascii  ASCII 文字に関するユーティリティ
curses.panel  curses のためのパネルスタック拡張
platform  実行中プラットフォームの固有情報を参照する
errno  標準の errno システムシンボル
ctypes  Python のための外部関数ライブラリ

3.12. 並行実行

モジュール名  役割
threading  スレッドベースの並列処理
multiprocessing  プロセスベースの並列処理
concurrent  パッケージ
concurrent.futures  並列タスク実行
subprocess  サブプロセス管理
sched  イベントスケジューラー
queue  同期キュークラス
dummy_threading  threading の代替モジュール
_therad  低水準のスレッド API
_dummy_thread  _thread の代替モジュール 

3.13. プロセス間通信とネットワーク

モジュール名  役割
socket  低水準ネットワークインターフェイス
ssl  ソケットオブジェクトに対する TLS/SSL ラッパー
select  I/O 処理の完了を待機する
selectors  高水準のI/O多重化
asyncio  非同期I/O、イベントループ、コルーチンおよびタスク
asyncore  非同期ソケットハンドラ
asynchat  非同期ソケットコマンド/レスポンスハンドラ
signal  非同期イベントにハンドラを設定する
 mmap  メモリマップファイル

3.14. インターネット上のデータ操作

モジュール名  役割
email  電子メールと MIME 処理のためのパッケージ
json  JSON エンコーダおよびデコーダ
mailcap  mailcap ファイルの操作
mailbox  様々な形式のメールボックス操作
mimetypes  ファイル名を MIME 型へマップする
base64  Base16, Base32, Base64, Base85 データの符号化
binhex  binhex4 形式ファイルのエンコードおよびデコード
binascii  バイナリデータと ASCII  データとの間での変換
quopri  MIME quoted-printable 形式データのエンコードおよびデコード
uu  uuencode 形式のエンコードとデコード

3.15. 構造化マークアップツール

モジュール名  役割
html  HyperText Markup Language のサポート
html.parser  HTML および XHTML のシンプルなパーサー
html.entities  HTML 一般実体の定義
xml.etree.ElementTree  ElementTree XML API
xml.dom  文書オブジェクトモデル(DOM)API
xml.dom.minidom  最小の DOM の実装
xml.dom.pulldom   部分的な DOM ツリー構築のサポート
xml.sax  SAX2 パーサのサポート
xml.sax.xmlreader  XML パーサのインターフェイス
xml.sax.handler  SAX ハンドラの基底クラス
xml.sax.saxutils  SAX ユーティリティ
xml.parsers.expat  Expat を使った高速な XML 解析

3.16. インターネットプロトコルとサポート

モジュール名  役割
webbrowser  便利なウェブブラウザコントローラー
cgi  CGI(ゲートウェイインターフェイス規格)のサポート
cgitb  CGI スクリプトのトレースバック管理機構
wsgiref  WSGI ユーティリティとリファレンス実装
urllib  URL を扱うモジュール群
urllib.request  URL  を開くための拡張可能なライブラリ
urllib.response  urllib で使用するレスポンスクラス
urllib.parse  URL を解析して構成要素にする
urllib.error  urllib.request が投げかける例外
urllib.robotparser  robots.txt のためのパーサー
http  HTTP モジュール群
http.client  HTTP プロトコルクライアント
ftplib  FTP プロトコルクライアント
poplib  POP3 プロトコルクライアント
imaplib  IMAP4プロトコルクライアント
nntplib  NNTP プロトコルクライアント
smtplib  SMTP プロトコルクライアント
smtpd  SMTP サーバー
telnetlib  Telnet クライアント
uuid  RFC 4122 に準拠した UUID オブジェクト
socketserver  ネットワークサーバのフレームワーク
http.server  HTTP サーバー
http.cookiejar  HTTP クライアント用の Cookie 処理
xmlrpc  XMLRPC サーバとクライアントモジュール
xmlrpc.client  XML-RPC クライアントアクセス
xmlrpc.server  基本的な XML – RPC サーバー
ipaddress  IPv4 / IPv6 操作ライブラリ

3.17. マルチメディアサービス

モジュール名  役割
audioop  生の音声データを操作する
aifc  AIFF および AIFC ファイルの読み書き
sunau  Sun AU ファイルの読み書き
wave  WAV ファイルの読み書き
chunk  IFFチャンクデータの読み込み
colorsys  色体系間の変換
imghdr  画像の形式を決定する
sndhdr  サウンドファイルの識別
ossaudiodev  OSS 互換オーディオデバイスへのアクセス

3.18. 国際化

モジュール名  役割
gettext  多言語対応に関する国際化サービス
locale  国際化サービス

3.19. プログラムのフレームワーク

モジュール名   役割
turtle  タートルグラフィックス
cmd  行指向のコマンドインタープリタのサポーt
shlex  単純な字句解析

3.20. Tk を用いたグラフィカルユーザーインターフェイス

モジュール名  役割
tkinter  Tcl/Tk の Python インターフェイス
tkinter.ttk  Tk のテーマ付きウィジェット
tkinter.tix  Tk の拡張ウィジェット
tkinter.scrolledtext  スクロールするテキストウィジェット
IDLE  
その他  

3.21. 開発ツール

モジュール名  役割
typing  型ヒントのサポート
pydoc  ドキュメント生成とオンラインヘルプシステム
doctest  対話的な実行例をテストする
unittest  ユニットテストフレームワーク
unittest.mock  モックオブジェクトライブラリ
unittest.mock  入門
2to3  Python 2 から 3 への自動コード変換
test  Python 用回帰テストパッケージ
test.support  テストのためのユーティリティ関数

3.22. デバッグとプロファイル

モジュール名  役割
bdb  デバッガーフレームワーク
faulthandler  Python traceback のダンプ
pdb  Python デバッガ
Python プロファイラ  
timeit  小さなコード断片の実行時間計測
trace  Python 文実行のトレースと追跡
tracemalloc  メモリ割り当ての追跡

3.23. ソフトウェア・パッケージと配布

モジュール名  役割
distutils  Python モジュールの構築とインストール
ensurepip  pip インストーラーのブートストラップ
venv  仮想環境の作成
zipapp  実行可能な Python zip 書庫を管理する

3.24. Python ランタイムサービス

モジュール名  役割
sys  システムパラメータと関数
sysconfig  Python の構成情報にアクセスする
builtins  組み込みオブジェクト
__main__  トップレベルのスクリプト環境
warnings  警告の制御
contextlib  with 文コンテキスト用ユーティリティ
abc  抽象基底クラス
atexit  終了ハンドラ
traceback  スタックトレースの表示または取得
__future__  future 文の定義
gc  ガベージコレクタインターフェイス
inspect  活動中のオブジェクトの情報を取得する
site  サイト固有の設定フック
fpectl  浮動小数点例外の制御

3.25. カスタム Python インタプリタ

モジュール名  役割
code  インタプリタ基底クラス
codeop  Pythonコードをコンパイルする

3.26. モジュールのインポート

モジュール名  役割
zipimport  Zip アーカイブからモジュールを import する
pkgutil  パッケージ拡張ユーティリティ
modulefinder  スクリプト中で使われているモジュールを検索する
runpy  Python モジュールの位置特定と実行
importlib  import の実装

3.27. Python 言語サービス

モジュール名  役割
parser  Python 解析木にアクセスする
ast  抽象構文木
symtable  コンパイラの記号表へのアクセス
symbol  Python 解析木とともに使われる定数
token  Python 解析木とともに使われる定数
keyword  Python キーワードチェック
tokenize  Python ソースのためのトークナイザ
tabnanny  あいまいなインデントの検出
pyclbr  Python クラスブラウザサポート
py_compile  Python ソースファイルのコンパイル
compileall  Python ライブラリをバイトコンパイル
dis  Python バイトコードの逆アセンブラ
pickletools  pickle 開発者のためのツール群

3.28. 各種サービス

モジュール名  役割
formatter  汎用の出力書式化機構

3.29. MS Windows 固有のサービス

モジュール名  役割
msilib  Microsoft インストーラーファイルの読み書き
msvcrt  MS VC++ 実行時システムの有用なルーチン群
winreg  Windows レジストリへのアクセス
winsound  Windows 用の音声再生インターフェイス

3.30. Unix 固有のサービス

モジュール名  役割
posix  最も一般的な POSIX システムコール群
pwd  パスワードデータベースへのアクセスを提供する
spwd  シャドウパスワードデータベース
grp  グループデータベースへのアクセス
crypt  Unix パスワードをチェックするための関数
termios  POSIX スタイルの端末制御
tty  端末制御のための関数群
pty  擬似端末ユーティリティ
fcntl  fcntl および ioctl システムコール
pipes  シェルパイプラインへのインターフェイス
resouce  リソース使用状態の情報
nis  Sun のNIS(Yellow Pages)へのインターフェイス
syslog  Unix syslog ライブラリルーチン群

3.31. 取って代わられたモジュール群

モジュール名  役割
optparse  コマンドラインオプション解析器
imp  import 内部へのアクセス

3.32. ドキュメント化されていないモジュール

モジュール名  役割
プラットフォーム固有のモジュール

4. まとめ

いかがだったでしょうか。

モジュールを使いこなせるようになると、Python のプログラミングでできることの幅が大きく広がります。そのためにも、モジュールをインポートする方法はしっかりと覚えておきましょう。

また、驚くほど沢山のモジュールがありますので、何か新しいプログラムを書きたい時は、あらためて公式ドキュメントの標準ライブラリページから、使える関数を探してみるということも癖づけておくと良いでしょう。

ぜひ、参考にして頂ければと思います。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (2件)

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる