Pythonには多くの「標準ライブラリ」や「外部ライブラリ」が「モジュール」として提供されている。それらを自分のプログラムで使う方法を説明する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
* 本稿は2019年7月2日に公開された記事を、Python 3.12.0で動作確認したものです(確認日:2023年11月10日)。
前回までは、Pythonで多くのデータをまとめて管理/操作するために使えるリスト/タプル/辞書/集合について見てきた。Pythonの言語仕様として組み込まれている基本的なデータ型としては他にも幾つかがあるが、それらについては後続の回で取り上げるとして、今回はPythonの「モジュールの使い方」について見ていくことにしよう。
「モジュール」とは、関連性のある「プログラム部品」を1つのファイルにまとめたものだ。本連載では、Jupyter Notebookと呼ばれるWeb上の対話環境を使っているので、このことにピンとこない方もいるかもしれない。第12回「Pythonの関数」の「ユーザー定義関数」では、プログラマーが作成する関数の意味合いについて、次のように述べた。
このようにすることで、コードの再利用(一度書いたプログラムの別のプログラムからの利用)が可能になる。このときに、プログラムを保存する先がモジュールだと考えればよい。Pythonのモジュールは(狭義には)「py」という拡張子が付けられたテキストファイルのことで、この中にPythonを使って書かれた関数などを格納する。例えば、第12回の「FizzBuzz問題の答えを返す関数」で作成した関数fizzbuzzを含んでいる「utility.py」という名前のモジュールがあったとすると、次のようなものになるだろう。
utility.pyファイルで定義されている関数fizzbuzzは、他のPythonプログラムでそのモジュール(utility.pyファイル)を「インポート」(導入)することで、いつでも使える。つまり、一度、関数fizzbuzzを定義してしまえば、そのコードを何度も書き直す必要がなくなる。これが上で述べた「コードの再利用」だ。これを実現するための仕組みが関数であり、モジュールだ。なお、モジュールの作成については次回に詳しく取り上げる。
なお、1つのモジュールには、意味的に関連性がある関数などをまとめるのが一般的だ。例えば、数学関数(絶対値、三角関数など)をまとめたモジュールや、HTTP通信を行うためのモジュールなどが考えられる。
Pythonには、これまでに何度も使ってきた組み込みの関数に加えて、さまざまな機能を提供するモジュールが「標準ライブラリ」として用意されている。組み込み関数(や、言語仕様で定められているもろもろの言語要素)と標準ライブラリは、Pythonをインストールするだけですぐにでも使える。
その一方で、これらとは別に配布されているモジュールも多数存在している。それらを「外部モジュール」「外部パッケージ」「外部ライブラリ」「サードパーティーパッケージ」などと呼ぶこともある。これらを使うには、Pythonとは別にインストールを行う必要がある(モジュールとパッケージはその規模や構成に違いがあるが、使う上ではパッケージはモジュールと基本的に同じものと考えてよい)。
本連載では、Project Jupyterの[Try Jupyter]ページにある[Try Jupyter with Python]リンクをクリックすると起動される一時的なPython環境を例にとって話をしているが、この環境には既に多数の外部ライブラリが利用できるようにセットアップされている。そこで、今回は標準ライブラリや外部ライブラリの中から幾つかのモジュールを使ってみることにしよう。
先ほどは標準ライブラリについて「Pythonをインストールするだけですぐにでも使える」と述べたが、実際には「モジュールを使う前には、そのモジュールを使うことをPythonに教える」必要がある。これを行うのが「import文」だ。import文は「標準ライブラリあるいはインストール済みの外部モジュールを自分のプログラムに導入(import)する」ために使用する。その構文は幾つかあるが、最も基本的なものは次のようになる。
import module_name
module_nameで指定されるモジュールを現在の環境にインポートする。
例えば、Pythonには乱数を生成するための「randomモジュール」が標準ライブラリに含まれている。これを使用するはimport文で「randomモジュールをインポート」しなければならない。これを行うには次のコードを実行する。
import random
これにより、「randomモジュールがインポートされ、そのモジュールが提供している関数」を自分のプログラムで利用できるようになる。プログラム中で「ランダムな値を基にした振る舞い」が必要となることはよくあるが、そのために乱数生成プログラムを毎度毎度作成するのは大変だ。乱数を取り扱うためのモジュールが最初から用意されていれば、それをインポートするだけでよくなるので、プログラム開発が効率的になる。
標準ライブラリや外部ライブラリは、このような「既に作成されているプログラムコード」を他のプログラムから「再利用」することを目的としたものであり、プログラマーは既存のコードを再利用することで、目の前にある「新たな(まだ解決されていない)問題」を解くことに専念できるようになる。
モジュールを上の構文でインポートした場合、そのモジュールが提供している機能にアクセスするには「モジュール名」にドット「.」(ピリオド)を続けて、その後に関数などの名前を指定する。
モジュールがどんな機能を提供しているかを知るには、そのドキュメントを見るのが一番だ。例えば、randomモジュールであれば、Python公式サイトにあるドキュメントから[ライブラリーリファレンス]リンクをクリックして、[Python 標準ライブラリ]ページを開き、「random」をキーワードとしてページ内を検索(して見つかったリンクをクリック)すればよい。randomモジュールのドキュメントは[random --- 擬似乱数を生成する]ページで公開されている。
ここでは引数に指定した範囲の整数乱数を取り出すrandint関数を使ってみよう。既に述べた通り、「randomモジュールのrandint関数」を利用するには「モジュール名.関数名」に従って「random.randint(引数)」のように記述をする。ここでは1〜20の範囲から乱数を1つ取り出して画面に表示する。
print(random.randint(1, 20))
以下に実行画面を示す。乱数を表示しているので、以下の実行結果と、読者が実際に上のコードを試した場合の実行結果は異なることもあることには注意しよう。
なお、複数のモジュールをインポートするときには、モジュール名をカンマ区切りで並べることもできる。ただし、Pythonのコーディングスタイルガイドではこのスタイルは使わないように述べられている。例えば、fooモジュールとbarモジュールをインポートするとしたら、次のようになる。
# 推奨されていない
import foo, bar
# 推奨されている
import foo
import bar
モジュールの最も簡単なインポート方法については以上だ。だが、よく使われる2つのインポート方法についても紹介しておこう。
Copyright© Digital Advantage Corp. All Rights Reserved.