IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第14回 モジュールとは何か?使い方と簡略化の方法を学んでみよう。 (菱沼佑香) 2020年12月

吉政創成 アシスタントの菱沼です。
今回も「いちばんやさしいPython入門教室(大澤 文孝氏著) 」を片手に勉強していきます。

さて、前回は自作関数で注意をしなくてはならないスコープと、グローバル宣言を学習しました。
今回は「Chapter4 プログラムを構成する基本的な機能」で上げられた、Pythonのプログラムを構成する6大要素とされているもののうち、「モジュール」について学習していきます。
具体的には、モジュールとはどんな存在なのか、記述を簡略化する方法はあるのか、といった内容です。外部ライブラリのインストール方法についてもまとめています。

<6大要素のメモ>
①計算機能
②変数(へんすう)
③繰り返し
④条件分岐
⑤関数
⑥モジュール(外部機能) ←ココ。

モジュールは関数集

さて、モジュールと言えば、最初のころにカレンダーのモジュールを使って遊びました。
その時の記事がこちらです。
第4回 Python標準ライブラリのモジュール「calendar」で遊んでみよう!

この時はカレンダーモジュールを使って、希望する月のカレンダーの表示してみた後、始まりの曜日を変更したり、指定した日の曜日を出してみたりと遊んでみました。

ではここで、改めてモジュールがどういうものか振り返ってみます。

-----引用-----
P.116
Pythonは「基本機能はシンプルに、応用的な機能はモジュールに持たせる」という設計思想を取っています。モジュールとは、簡単に言うと、機能がたくさん詰まった、「関数集」みたいなものです。
モジュールは、Pythonに付属しているものもありますし、他の作者が作っていて、それをダウンロードして、別途インストールしないと使えないものもあります。
どちらの場合も、利用するには「モジュールを読み込む」という操作が必要です。モジュールを読み込む操作は、「インポート(import)する」と言います。
----------------

「モジュールは関数集」ということですが、どういうことかを確認するために、ここでもカレンダーのモジュールを使ってみます。

fig01

左はcalendarモジュールを読み込んだ(importした)後、2020年10月のカレンダーをデフォルトのまま表示したものです。
右側は、カレンダーの始まりの曜日を日曜日に変更して、2020年10月のものを表示しました。
始まりを日曜日に変更する際、「calendar. setfirstweekday」と「calendar.SUNDAY」という記述を使用しています。

ではここで、calendarモジュールにはどんな関数が含まれているのかを確認してみます。
確認はdir関数を使えばできるそうです。

>>>dir(calendar)

fig02

これを実行した結果が上図になります。calendarモジュールに入っている関数の一覧が表示されました。マーカーした部分が、始まりの曜日を変えるのに使用した関数になります。
モジュールの中にはこれだけ多くの関数が入っていて、それぞれの役割があります。その中から使いたい関数を選んで、文法通りに書けば処理をしてくれる便利なものということがわかりました。

モジュール自体は、世のPythonエンジニアの皆様が作ったものがたくさん公開されています。その中から自分が求めている機能が見つかれば、わざわざその部分を開発する必要がないということになります。
また、自作関数を駆使して自分でモジュールを作り上げた場合も、他のモジュールと同様、他の方に提供することが可能だということです。

モジュールを使うときの便利な書き方

ところで、カレンダーの始まりの曜日を変えた時にも思ったのですが、記述が長いなと...。
>>> print(calendar. setfirstweekday(calendar.SUNDAY))

calendarを2回も打つ必要あるんか、と。これにはきちんと意味があるらしいのですが長いなと。
どうやらこれを簡略化する方法が2つあるそうです。

① asを使う方法
-----引用-----
P.117
asを指定すると、プログラムでは、好きな別名で記述できるようになります。上記の例にあるように、「import calendar」として読み込んだときは、「calendar.関数名」のように、モジュール名と命令をドットでつなげて記述して実行しますが、同じ命令をasを使って書くこともできます。

>>> import calendar as c

「as c」と記述すると、これを「c」という名前で参照できます。すなわち、以下のように書くことができます。
>>> print(c.month(2017,12))
----------------

ということですのでやってみました。

fig03

なんどもcalendarと長々入力しなくてもよくなりました。

② fromを使う方法
-----引用-----
P.118
>>> from モジュール名 import 利用したい関数名

たとえば、以下のコードなら1行目で「month」という関数を取り込むため、2行目で「モジュール名.~」という表記そのものを省略して利用できます。

>>> from calendar import month
>>> print(month(2017,12))
----------------

ではこちらもやってみます。

fig04

左:単純にカレンダーを呼び出すだけ
中:関数を2つ指定した
右:「*」を使った方法(ただし非推奨のようです。)

曜日の変更はすんなりといかず、いろいろやってみました。
最初、 [ setfirstweekday(SUNDAY) ]と記述していましたが、上手くいかず、calendarモジュールでは曜日は数字で定義されているということを思い出し、日曜を示す「6」を指定してみたところ表示できました。
(※月=0、火=1、水=2、木=3、金=4、土=5、日=6として定義されています。)

<非推奨:ワイルドカードについて(画像右の方法)>
ところで、これらを調べる過程で、右のように「*(ワイルドカード)」を使う方法もあることがわかりました。こういうものらしいです。

-----引用-----
「*」(ワイルドカード)を用いると、モジュール内で定義されているメソッドや変数をまとめてインポートできます。
(中略)
PEP8によれば、「from import *」は非推奨の手法です。
ワイルドカードを使った import (from import *) は避けるべきです。

なぜなら、どの名前が名前空間に存在しているかをわかりにくくし、コードの読み手や多くのツールを混乱させるからです。
モジュール名称が長くタイピングが面倒な場合には、以下のように別名(エイリアス)を使います。
これによりでモジュールを参照できます。
>>>import <module> as <md>
(引用:Pythonの「from import *」の使い方を現役エンジニアが解説【初心者向け】
----------------

あるけど、非推奨らしいです。これを使うくらいならasを使えと。ほう。
ですが、せっかくなのでやってみたのが画像の右です。
こちらでも2行目を[ SUNDAY ]で指定してもうまくいかず、6であれば表示されました。

モジュールとパッケージ、ライブラリの違いは?

ところで、「モジュール」と言う言葉を検索すると、必ず見かけるのが「パッケージ」や「ライブラリ」と言う言葉です。それぞれ何が違うのでしょうか。

・モジュール:関数を集めて一つのファイルにまとめたもの(.py)
・パッケージ:モジュールをまとめたもの
・ライブラリ:いくつかのパッケージを一つにまとめてインストールできるようにしたもの

ということだそうで、大きさ(順番)で言えば「ライブラリ>パッケージ>モジュール」ということになります。
ちなみに、ライブラリには標準と外部が存在するそうです。それぞれの違いは次の通り。

標準:Pythonにあらかじめ用意されているもの(importを使うもの・使わないもの)
importをしなくてもいいもののことを組み込み関数と言い、これまで何度か使用してきたprintやstr、intがそれにあたります。
組み込み関数(importしなくても利用できるもの)の一覧はこちらです。

fig05

引用:組み込み関数|Python3.9.0 標準ライブラリ

先ほど使用したcalendarモジュールは標準に含まれていて、importをしないと使えません。
標準のライブラリはこちらで確認できます。
Python 標準ライブラリ | Python3.9.0

外部:サードパーティによって開発・提供されているもの(インストールしないといけない)
どんなものがあるのかはPython Package Index(PyPI/パイパイ)で確認できるそうです。このサイトには世界中にいる様々な開発者によって作られたモジュールが、インストールできる状態でパッケージ化されたものが登録されていると言います。
登録されているモジュールの例としては、機械学習物、画像処理物、PDF化するものなどがあるそうです。何か作りたいものができた時はまずこのサイトで検索してみれば見つかるようです。

では外部ライブラリをインストールしたい場合はどのようにすればいいのでしょうか?

-----引用-----
P.235
PyPIから使いたいモジュールを1つずつダウンロードしなくてはいけないのかというと、そういうわけでもありません。
実はPython2.7.9以降、Python3.4以降には、pipコマンドと言うものが標準で含まれています。このコマンドを使って、使いたいパッケージ名・モジュール名を指定すると、PyPIからダウンロードしてインストールするという手順が一括で完了します。
----------------

ということなので、そのうちテキストで使うことになるらしい、PDFを作るモジュール「ReportLab」をここでインストールしてみます。(ただしwindowsで野確認です。Macは最後の方に書いています。)

fig06

ライブラリをインストールする方法

①検索窓を使う
上図の通り、検索窓に [ pip install (モジュール名) ]を入力すると、コマンドの項目に[ pip install (モジュール名) ]が出ます。
このコマンド欄の[ pip install (ライブラリ名) ]を選択すると、コマンドプロンプトが一瞬だけ起動して、インストールを行います。

②コマンドプロンプトを使う
検索窓に[cmd]と入力するとコマンドプロンプトが起動します。
そこに、[ pip install (ライブラリ名) ]を入力して実行すると、インストールが完了します。
上図の右上(赤文字)がコマンドプロンプトに直接入力したときの画面です。

※もしうまくいかなかった場合、[ py -m pip install (ライブラリ名) ]で試してみて下さい。私は[ py -m ]を付けなくてもうまくいきましたが、付けないと通らないと書かれているサイトがありました。

ライブラリをアンインストールする方法

コマンドプロンプトを起動して、[ pip uninstall (ライブラリ名) ]と入力して実行します。
そうすると、「本当に消していいのか?yかnで答えろ」と出るので、「y」を入力すると、アンインストールが完了します。
上図の右下(青文字)がアンインストールの時に入力したときの画面です。

インストールされているライブラリを確認する方法

インストールができたかを確認するには、 [ pip list ]を使えば、今インストールされているライブラリが確認できます。

fig07

pipのバージョンアップの方法

ところで、[ pip install ]を実行しようとしたときに、下の警告文が表示されました。
WARNING: You are using pip version (使用中のver), however version (新しいver) is available.

これは、「今使ってるpipのバージョンが低いから、バージョンアップをしたらどうよ」と言う警告なんだそうです。アップデートする方法を探してみたところ、次のコマンドを入力するとできるようなので、やってみました。

入力するコマンド:[ pip install -U pip ]

fig08

無事完了したようです。

Macの場合

Macでは確認していないので、一部分を引用します。

-----引用-----
P.239
Macでは、「pipコマンド」ではなく「pip3コマンド」を使う点に注意してください。間違えてpipコマンドを使うと、Macに標準でインストールされているPython2系に対する操作となってしまいます。

①ターミナルを起動
②pip3をアップグレードする
>>> pip3 install ?upgrade pip
③pip3コマンドでReportLabをインストールする
>>> pip3 install reportlab
④clangコマンドのインストール
⑤再度、ReportLabをインストールする(③と同じコマンド)
----------------

Python3の場合はpip3を使うということです。Macの方はご注意ください。

それでは今回はこちらで終了です。お読みいただきありがとうございました。

【参考サイト】
【Python】dir関数でパッケージ・モジュールの定義を調べる
Pythonのモジュール、パッケージ、ライブラリ徹底解説!
Pythonライブラリのインストール - pipの使い方
pipでアップデートするときのコマンド pip update|Qiita @HyunwookPark
Python3のimportパターン13個

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes