__pycache__、 .pyc の役割

__pycache__ というディレクトリがそろそろ気になってきた。 なんか気づいたらできてる。
なんなんだこれは。

以下で議論されていた。
python - What is __pycache__? - Stack Overflow

要点をまとめると。

  • ファイルをインポートした際にできる
  • python compiled(.pyc)ファイルが入ってる。pythonがコンパイルされたバイナリファイル。
  • 役割としては、インポート時の読み込みを早くする。消しても問題ない。
  • python3.2以降で__pycache__ディレクトリに入るようになった。それまでは実行ディレクトリ直下に.pycファイルが作成されていた。

例えば、foo.pyを作成して、別スクリプトから

import foo

とかやると下記のように__pycache__/foo.cpython-37.pyc が突如現れる。

$ tree __pycache__/
__pycache__/
└── foo.cpython-37.pyc

このファイルにはコンパイルして得られたバイトコードが保存されている。
こうしておけばimport fooのコンパイルにかかる時間を節約できるって寸法。

要するにキャッシュなので無視していいファイル、無視した方が良いファイルみたい。

ちなみに

PYTHONDONTWRITEBYTECODE環境変数でキャッシュを作成するか否かを制御できる。
作成したくない場合1にしときましょう。

$ export PYTHONDONTWRITEBYTECODE=1

参考:1. コマンドラインと環境 — Python 3.8.2 ドキュメント