
Pythonを勉強するために本を買ったけど,積読してる.
モジュールの使い方を知りたい.
モジュール,パッケージ,ライブラリの違いがわからない.
そんな方が,モジュールの基本を学べる記事です.
本記事の内容
Pythonにはモジュール,パッケージ,ライブラリというものがあります.本記事では,主にモジュール,すなわちpythonのプログラムファイルについて解説します.まずは,pythonであらかじめ準備されたモジュールを用いて,モジュールの使い方を解説します.そして,ご自身でモジュールを作成していきます.さらに,次の記事から複数回に渡り,ライブラリを解説していきます.これまでの記事と同様に,コードを打ちながら学んで行きましょう.
Pythonの文法基礎から実務的な分析・機械学習まで学べるオンライン学習サービス(1週間無料です)
モジュールとは
関数やクラスなど,Python の定義や文のコードが記述されたファイルです.これまで制御構文や自作関数などを学んできましたね.それらを組み合わせたコードを作成して,何度も使い回すとしましょう.そのコードを毎回異なるプログラムファイルで書き直すのは面倒ですよね.しかし,モジュールとしてファイルを保存して毎回取り出す(読み込む)ことができれば,コードを書く手間が省けますし,さらに読み込むコードが長い場合,数行で済むのでコードがスッキリしますよね.
(モジュール) Python コードの組織単位としてはたらくオブジェクトです。モジュールは任意の Python オブジェクトを含む名前空間を持ちます。モジュールは importing の処理によって Python に読み込まれます。python公式より
Python インタプリタを終了させ、再び起動すると、これまでに行ってきた定義 (関数や変数) は失われています。より長いプログラムを書きたいなら、テキストエディタを使ってインタプリタへの入力を用意しておき、手作業の代わりにファイルを入力に使って動作させるとよいでしょう。この作業を スクリプト (script) の作成と言います。
(中略)
こういった要求をサポートするために、Python では定義をファイルに書いておき、スクリプトの中やインタプリタの対話インスタンス上で使う方法があります。このファイルを モジュール (module) と呼びます。python公式より
モジュール,パッケージ,ライブラリの違い
- モジュール:関数やクラスなど,pythonコードをまとめた,拡張子が「.py」のファイル.
- パッケージ:複数の.py ファイルを格納するサブディレクトリ(モジュールをまとめたフォルダ)
- ライブラリ:関数やクラス、モジュール、パッケージなど、他のプログラムから呼び出されるものの総称.
パッケージ (package) は、Python のモジュール名前空間を “ドット付きモジュール名” を使って構造化する手段です。例えば、モジュール名 A.B は、 A というパッケージのサブモジュール B を表します。ちょうど、モジュールを利用すると、別々のモジュールの著者が互いのグローバル変数名について心配しなくても済むようになるのと同じように、ドット付きモジュール名を利用すると、 NumPy や Pillow のように複数モジュールからなるパッケージの著者が、互いのモジュール名について心配しなくても済むようになります。python公式より
モジュールの使い方(読み込み方)
Pythonにあらかじめ準備されている標準モジュールライブラリがあり,標準ライブラリと呼んでいます.まずは,mathモジュールを例に,モジュールの使用方法を解説します.
Python ではモジュールを使うために,import という文を使います.importに続いて半角スペースを挟んで,モジュール名を記述します.
import math
実行しても,何も返ってきませんが,モジュールがインポートされています.
定義されているクラスや関数,変数を呼び出すには,モジュール名の後に,ピリオドをつけて,呼び出したいオブジェクト名を記述します.
math.sqrt(2) #sqrtは平方根を計算する関数
モジュール内で定義されているオブジェクトを,読み込み元のプログラムでそのまま使いたい場合は,from を用いて以下のように書くことができます.
from math import sqrt sqrt(2)
モジュール名を別名で使用したい場合,as以降に使用したい別名を記述します.一般的にモジュール名を短縮する時に使用することが多いので,略称を記述することが多いです.
import math as ms ms.sqrt(2)
モジュールや含まれている関数については,「モジュール索引」から調べることができます.
import this (The Zen of python)
Pythonには,その哲学(というか心得)を簡潔に表現した詩が埋め込まれています.禅の瞑想が必要になったときにはいつでも,対話型インタプリタに下記を入力,実行するといいでしょう.
import this
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one– and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!
モジュールの作成方法
モジュールは,Python の定義や文のコードが記述されたファイル(拡張子 .py)である,と解説しました.ここまで使用してきたgoogle colaboratoryのファイル(拡張子.ipynb)とは異なる拡張子です.google colaboratoryのファイルには,コードセル(Code セル)に Python ソー スコード,Markdown セルに文書を持ち,出力結果も内部的に保存しています.一方,モジュールファイ ル(拡張子 .py)はPython ソースコードのみを含んだファイルです.従って,ここからは,モジュールファイ ル(拡張子 .py)を作成するために,google colaboratoryではなく,VScodeまたはSpyderを使用しましょう.
いずれかを開き,下記のいくつかのコードを作成し,各々のファイル名でモジュールファイル(拡張子.py)として保存すると,モジュールの作成完了です.ここでは,ファイルの保存先として,便宜上User¥nameの下層に「Pyfile」というフォルダを作成して保存していきます.
def fibo(n): """整数nまでのフィボナッチ数列を出力する""" a, b = 0, 1 while a < n: print(a, end=' ') a, b = b, a+b return
こちらを,fibonacci.pyというファイル名で保存します.
def circle (radius, pi = 3.14): """半径radiusを変数として,円の面積areaを出力する""" area = radius * radius * pi return area
こちらを,circle.pyというファイル名で保存します.
def sphere_surface (radius, pi = 3.14): """半径radiusを変数として,球の表面積surfaceを出力する""" surface = radius * radius * pi * 4 return surface def sphere_volume (radius, pi = 3.14): """半径radiusを変数として,球の体積volumeを出力する""" volume = radius * radius * radius * pi * 4/3 return volume
こちらを,sphere.pyというファイル名で保存します.
パッケージの作成
作成したモジュールをパッケージにしてみましょう.モジュールを保存したUser¥name¥Pyfileの下層に「globe」というフォルダを作成して保存していきます.
├ fibonacci.py
├ globe
│ └─ __init__.py
│ └─ circle.py
│ └─ sphere.py
︙
globeの中に「__init__.py」という何も記述していないファイルを作成します.これよって,globeがパッケージとして認識されます.そして,前述で作成したcircle.pyとsphere.pyをglobeに移動します.
Pathを通す
Pythonが「Pyfile」を参照できるようにPathを通します.まず,Pythonが参照できる全ての場所を標準ライブラリのsysモジュールで確認してみます.
import sys for place in sys.path: print(place)
/opt/anaconda3/lib/python3.10
/opt/anaconda3/lib/python3.10/lib-dynload
/opt/anaconda3/lib/python3.10/site-packages
/opt/anaconda3/lib/python3.10/site-packages/aeosa
/opt/anaconda3/lib/python3.10/site-packages/setuptools/_vendor
この中にUser¥name¥Pyfileを追加します.
import sys sys.path.insert(0, "/Users/name/Pyfile")
このファイルの存在によって,globeがパッケージとして認識されます.
モジュールの読み込み
まず,読み込むためのファイルを準備します.Pyfileの直下(前述で作成したfibonacci.pyと同じ階層)に,新しいファイルを作成(特に名前をつけなければ,Untitle1.pyなどと命名されます.)し,その中でモジュールを実行していきましょう.
読み込み方は,前述と同じです.
import fibonacci fibonacci.fibo(100)
from fibonacci import fibo fibo(100)
パッケージの読み込み
パッケージを読み込む際は,fromを用います.
from globe import circle circle.circle(8)
from globe import sphere sphere_surface(4)
from globe import sphere sphere_volume(4)
モジュールについて,基本を学べましたでしょうか?
次はnumpyというライブラリの使い方について学びましょう!
最後まで読んでくださり,ありがとうございます☺️