Categories: Python

【Python】__pycache__ディレクトリについて解説

この記事では、Pyhtonを使って開発をしているといつの間にか勝手に作成されている__pycache__ディレクトリについて解説します。

結論から言ってしまえば__pycache__ディレクトリは「コンパイル済みのモジュールのキャッシュ」なので特に気にする必要はありません。

もう少し詳しく知りたい方や__pycache__ディレクトリを生成したくない(キャッシュしたくない)方だけ読み進めてください。

__pycache__ディレクトリとは?

__pycache__ディレクトリは、キャッシュを保存しておくためのディレクトリです。ちなみに読み方は「パイキャッシュ」です。

Pythonではモジュールの読み込みを高速化するため、実行時にコンパイルしたモジュールを__pycache__ディレクトリにキャッシュしておきます。

つまり、自作したモジュールをimportして実行することで__pycache__が自動的に作成され、コンパイル済みのモジュールをキャッシュしといてくれるんですね。

例えば、以下の画像はtest.pyからmodule1.pymodule2.pyを読み込んだ場合の__pycache__です。

実行するとこんな感じで自動的にキャッシュが作成されます。

作成されるファイルは、モジュール名.バージョン.pycという名前で生成されます。例えば、モジュール名がhello.pyで、CPythonのバージョンが3.9だとすると__pycache__/hello.cpython-39.pycとしてキャッシュされます。

ちなみに、モジュールのソースコードを変更するとコンパイル済みのものと変更日時を比較して再コンパイルが必要かどうかを判断しています。

キャッシュを作成したくない場合

Pythonコード実行時に-Bオプションを付けてやることでインポート時に.pycファイルの書き込みを禁止することができます。

コマンドライン

python -B test.py

実行しても.pycファイルもとい__pycache__ディレクトリが作成されませんでした。

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago