ライブラリ?パッケージ?モジュール?ここらへんのややこしいことを初心者なりにまとめてみた


はじめに

  • ライブラリ、パッケージ、モジュールについてまとめます
  • インポートの方法についてscikit-learnを例に解説と考察を行います

※プログラミング関係の内容を他にも投稿していますので、よろしければこちらの一覧から他の投稿も見て頂けますと幸いです。

環境

  • conda 4.8.3
  • python 3.8.3

用語の整理

ライブラリ>パッケージ>モジュール>クラス、関数という関係です。
※ただし、ライブラリには正確な定義はない

「ライブラリ」
ライブラリとは、いくつかのパッケージをまとめて一つのライブラリとしてインストールできるようにしたものです。具体的な定義はなく、モジュールのことをライブラリと呼んだり、パッケージのことをライブラリと呼んだりと様々な使用法があるようです。
ライブラリには以下の2種類があります。

 ・標準ライブラリ
 …Pythonにあらかじめ標準で用意されているライブラリ
  そのまま何もせずに使える「組み込み関数(例:print)」と
  事前にimport文で読み込みが必要なもの(例:csv)
  標準ライブラリは次のサイトで確認可能
  https://docs.python.org/ja/3/library/

 ・外部ライブラリ
 …インストールで追加して、import文で呼び出して仕様(例:pckle)
  外部ライブラリは以下のPyPI(パイパイ)で検索可能
  https://pypi.org/

「パッケージ」
モジュールをいくつか集めてまとめたものがパッケージです。

「モジュール」
モジュールとは、Pythonのファイル(.py)の事です。モジュールには関数やクラスが定義されています。

「クラス」
クラスの中にメソッドが定義されており、クラスを束ねたものがモジュール

(関数とクラスの違いはまだあまり理解できていないので、今後勉強します…)

インポートの方法

以下のいずれかの方法でインポートが可能です。

import パッケージ(モジュール名)
from パッケージ(モジュール名) import オブジェクト名(クラス名, 関数名)
import パッケージ.モジュール名
from パッケージ.モジュール名 import オブジェクト名(クラス名, 関数名)

例えば、sklearnの線形回帰を実行する際は以下のインポート文を書きます。

from sklearn.linear_model import LinearRegression


別名をつけてインポートする際には以下のいずれかのようにasを使います。

import パッケージ(モジュール名) as 別名
from パッケージ(モジュール名) import オブジェクト名(クラス名, 関数名) as 別名 ※オブジェクト自体に別名がつく

例として、よく目にするnumpyのインポート文を書いてみます。

import numpy as np

sklearnのLinearRegressionのインポートを考えてみる

上で述べたように、次のインポート文でインポートが可能です。

from sklearn.linear_model import LinearRegression

また、次の2つでもエラーなく実行されます。

import sklearn.linear_model
from sklearn import linear_model

しかし、次のインポート文ではエラーになります。

import sklaern
出力結果
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-c019031db95a> in <module>
----> 1 import sklaern

ModuleNotFoundError: No module named 'sklaern'

こちらでも上記のインポート文ではエラーが起こると記載があります。sklaernというパッケージ自体はインポートできないのかな?と推測しますが、イマイチ腑に落ちていません…以下の実行結果からは、"sklearn"も"sklearn.linear_model"もどちらも同じモジュールであると読み取れます。(詳しい方、教えてください。

import sklearn.linear_model
sklearn
出力結果
<module 'sklearn' from 'C:\\Users\\ユーザー名\\anaconda3\\lib\\site-packages\\sklearn\\__init__.py'>
import sklearn.linear_model
sklearn.linear_model
出力結果
<module 'sklearn.linear_model' from 'C:\\Users\\ユーザー名\\anaconda3\\lib\\site-packages\\sklearn\\linear_model\\__init__.py'>

まとめ

図で表すと以下のようになると理解しました。

参考