Python: 標準ライブラリの格納場所

Pythonの標準ライブラリ(標準モジュール・標準パッケージ)が格納されている場所は、 Pythonをインストールしたディレクトリにある「Lib」ディレクトリ(フォルダ)です。

Libディレクトリにフォルダがある場合は標準パッケージ、 .pyファイルがある場合は標準モジュールです。

ライブラリ、パッケージ、モジュールの違いについては次の記事を参考にしてください。
(関連記事: ライブラリ、パッケージ、モジュールの関係・違い

Libディレクトリの中身

実際にLibディレクトリの中を見てみます。
下図ではディレクトリ(フォルダ)として「html」「http」「json」などがあります。 これらは標準パッケージです。

ディレクトリ(フォルダ)

.pyファイルとしては「re.py」「random.py」などがあります(下図)。 これらは標準モジュールです。

.pyファイル

__file__属性で調べる

先程見た標準ライブラリは__file__属性でファイルの場所を調べることもできます。

import json
import re

print(json.__file__)
print(re.__file__)

# 実行結果
C:\anaconda3\lib\json\__init__.py
C:\anaconda3\lib\re.py

jsonは「json\__init__.py」と表示されているので 標準パッケージであることがわかります。 reは「re.py」と表示されているので 標準モジュールです。 どちらもlibディレクトリにあることがわかります。

__file__属性を使わずにprint(パッケージ名 or モジュール名)だけでも 同じような情報が表示されます。

import json
import re

print(json)
print(re)

# 実行結果
<module 'json' from 'C:\\anaconda3\\lib\\json\\__init__.py'>
<module 're' from 'C:\\anaconda3\\lib\\re.py'>

どちらでも好きな方を使ってください。

「math」はどこ?

mathも標準ライブラリなのですが、 Libディレクトリの中に「mathディレクトリ」も「math.py」も見当たりません。

__file__属性を見てみましょう。

import math

print(math.__file__)

# 実行結果
    print(math.__file__)
AttributeError: module 'math' has no attribute '__file__'

「__file__属性がない」とエラーが発生しました。困りましたね。

「print(math)」はどうでしょうか?

import math

print(math)

# 実行結果
<module 'math' (built-in)>

(built-in)と表示されています。 つまり「math」は標準ライブラリだけど「built-in」のなのでLibディレクトリにはない、 という事です。
「sys」も同じように調べてみると「built-in」になっています。

組み込まれている(built-in)なら、探しても見つからないはずですね。

まとめ

標準ライブラリの場所は、 「Libディレクトリ」か「built-in(組み込み)」に分かれます。

Libディレクトリ内にディレクトリとして存在するか、 .pyファイルとして存在するか、 Libディレクトリに無い場合は「built-in」です。

Python