【初心者向け】モジュール・パッケージとは何か?

はじめに

この章では、お好きなテキストエディタとターミナル(コマンドプロンプト)を元に、自作したモジュールを読み込み利用していきます。
そのため、Jupyter NotebookやGoogle Colabの場合、この章に書かれているプログラムだと動作しないため、次の流れで試して見てください。

また、下記リンクからColab上で動作する方法もあげていますので確認してみてください。
YouTube動画 / Colabにて動作させる

1) お手元のPCでfortune.pyを作成。
次に、Colabの左メニュー(>を押します)から、目次、コードスニペット、ファイルの3つが表示され、その中のファイルタブを選択する。

2) 1で開いたタブから、アップロードを押すと、手元のPCで作成したfortune.pyを選択出来るのでアップロードする。

# fortune.py
def get_fortune():
    import random # randamではなく、randomなので注意です
    results = ['大吉', '吉', '小吉', '凶', '大凶', '末吉']
    return random.choice(results)

3) その後Colab側で次のプログラムを実行。

import fortune
result = fortune.get_fortune()
print("今日の運勢は...", result)

ライブラリ

ライブラリとは、ある程度まとまった汎用性の高い処理(関数・クラス・その他)を他のプログラムから読み込むことで、使うことが出来るようにしたファイルです。
Python内では基本的にimportできるものをライブラリと呼んだりします。
なお、ライブラリは一般的な呼び名であり、Pythonでは、基本的にライブラリという表記があったら、下記で説明するモジュールのことだと思ってください。

モジュールとパッケージ

モジュールはPythonのコードをまとめたファイルであり、他のプログラムから再利用できるようにしたファイルのことを「モジュール」と言います。
それ単体では動作しませんが、importすることでモジュールが使えるようになります。
パッケージとは__init__.pyと複数のモジュールがディレクトリに集まったものです。
__init__.pyはパッケージディレクトリに置かれ、そのパッケージをインポートした際に実行されます。

モジュールのインポート

import文の単純な使い方は次のようになります。
import 読み込みたいモジュール
読み込みたいモジュールの部分は、他のPythonファイルのファイル名から拡張子の.pyを取り除いたものです。
例えば、sysモジュールを読み込みたい時は次のようにします。
(sysモジュールは、Pythonをインストールした段階で利用できるモジュールの1つです。これを標準モジュールと呼び、他にもosモジュールなど様々あります。)

import sys

複数のモジュールをインポートする場合、「,」でモジュール名を区切ってインポートできます。

import sys, os

例えばmathモジュールのcos関数を利用したい場合はモジュール名.関数名(引数)で利用できます。

import math
math.cos(1) # 0.5403023058681398

独自で作成したモジュールをインポートする

今回は運勢プログラム(占いモジュール)を作ります。
まずmainプログラムを作成します。
(ファイル名は自由ですがここではmain.pyとします。)

“`python:main.py
import fortune

result = fortune.get_fortune()
print(“今日の運勢は… “, result)

<pre><code><br />では次にfortuneモジュールを作っていきます。
下記プログラムを**fortune.py**というファイル名で上の作成したmainプログラム(main.py)と同じ場所に保存してください。

“`python:fortune.py
def get_fortune():
import random # randamではなく、randomなので注意です
results = [‘大吉’, ‘吉’, ‘小吉’, ‘凶’, ‘大凶’, ‘末吉’]
return random.choice(results)

それでは、main.pyとfortune.pyを同じフォルダに保存してあると思いますので、作成したmain.pyを実行してみましょう。
実行するには、Macをお使いの方は、ターミナル、Windowsの方はコマンドプロンプトから、保存されたmain.pyを実行します。

python main.py

上記を実行する際に、そのままターミナルを起動して上記のコマンドを実行した場合に、(null): can’t open file ‘main.py’: [Errno 2] No such file or directoryというエラーがでる場合があります。
これは、main.pyというファイルが今いる階層に存在しないためです。

実行する度に、出力結果が変われば問題なく動作しています。

fromとimport

from ファイル名(モジュール名) import *でファイル名の指定なしに呼び出しが可能になります。

from モジュール名 import *

モジュールの関数などを利用する際に、モジュール名.の記述を省略して関数名だけで使用したい場合は以下になります。

from モジュール名 import 関数名, 関数名, ...

上記の構文を元に次のようにプログラムを書くことが出来ます。

from math import cos, sin, tan
cos(1)

先ほど、fortune.pyでrandom.choice(results)と記述しましたが、
fortune.pyはfromを使い以下のように書き換えることができます。

def get_fortune():
    from random import choice
    results = ['大吉', '吉', '小吉', '凶', '大凶', '末吉']
    return choice(results)

また、名前を指定せずにモジュール内のすべてのメンバ(関数、定数、クラスなどのこと)をインポートする場合は、以下のように指定します。

# from モジュール名 import *
from math import *
cos(1)
sin(1)

fortune.pyでrandomをサンプルでimportしているのは関数内ですが、
関数外でもインポートできます。

from random import *

def get_fortune():
    results = ['大吉', '吉', '小吉', '凶', '大凶', '末吉']
    return choice(results)

print(get_fortune())
sin(1)

別名でのモジュールのインポート

# main.py
import fortune

result = fortune.get_fortune()
print("今日の運勢は... ", result)

import fortuneと記述していましたが、asを用いることで、別名をつけることができます。
以下が別名をつけたサンプルです。

import fortune as ft

result = ft.get_fortune()
print("今日の運勢は... ", result)

別名をつけたことでft.get_fortune()と呼び出すことが出来るようになりました。

必要なものだけをインポートする

*で全てインポートしましたが、必要な部品だけもインポートできます。

from fortune import get_fortune

result = get_fortune()
print("今日の運勢は... ", result)

また別名をつけ、かつget_fortuneだけインポートするサンプルです。

from fortune import get_fortune as gf

result = gf()
print("今日の運勢は... ", result)

ライブラリ・モジュールの場所を調べる

ライブラリの場所は、モジュールの file アトリビュートか path アトリビュートで調べることができます。
例えば次のようにすることで調べられます。

import os
print( os.__file__ ) # /Users/aiacademy/anaconda3/lib/python3.6/os.py

おみくじアプリを実行してみる。

Macの方は、ターミナル、Windowsの方はコマンドプロンプトを起動し、先ほど作成したmain.pyを次のmain.pyがあるフォルダに移動し、実行して見ましょう。

python main.py

実行すると、

今日の運勢は... ○○です。

というように、○○には、ランダムで実行毎に運勢の結果が変わっているのがわかるかと思います。
もしこの章でおみくじアプリが実行できなかった場合は下記テキストをご参考ください。
コマンドプロンプトで動作するおみくじアプリを作ってみよう!

まとめ

この章ではモジュールに関しての基礎を学びました。
様々な読み込み方(import)がありますので、どれも使いこなせるようにしましょう。

コメントを残す