Python: 標準ライブラリの格納場所
Pythonの標準ライブラリ(標準モジュール・標準パッケージ)が格納されている場所は、 Pythonをインストールしたディレクトリにある「Lib」ディレクトリ(フォルダ)です。
Libディレクトリにフォルダがある場合は標準パッケージ、 .pyファイルがある場合は標準モジュールです。
ライブラリ、パッケージ、モジュールの違いについては次の記事を参考にしてください。
(関連記事:
ライブラリ、パッケージ、モジュールの関係・違い)
Libディレクトリの中身
実際にLibディレクトリの中を見てみます。
下図ではディレクトリ(フォルダ)として「html」「http」「json」などがあります。
これらは標準パッケージです。
.pyファイルとしては「re.py」「random.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」です。