そもそも__pycache__
とは
Pythonでコードを実行すると、ソースコード(.py
)をそのまま実行するのではなく、一度「バイトコード(.pyc
)」という形式にコンパイルしてから動きます
-
.py
→ コンパイル →.pyc
- 生成された
.pyc
は__pycache__
ディレクトリに入る - 次回以降は
.pyc
を読み込むので起動が少し速くなる
ファイル名にはPythonのバージョンや最適化情報が付く
__pycache__/
example.cpython-311.pyc
import
との関係
Pythonで import
をしたとき、以下の流れとなるようです
- まず
__pycache__
の中に.pyc
があるかを探す - あればそれをロードする(=ソースを毎回解釈しない)
- なければ
.py
を読み込んで.pyc
を新しく生成する
この前提を知っておくとimport
関連のエラーが起こったときに役立つときがあるかもしれません
消していいの?
結論:消してOK
キャッシュなので削除しても次回 import
時にまた作られます
Gitでの扱い
__pycache__
をリポジトリに含める必要はありません
.gitignore
に追記して無視しましょう
# Python cache
__pycache__/
*.pyc
クリアしたいとき
環境切り替えとかでキャッシュが邪魔になるときは、一括削除すればOKです。
find . -name "__pycache__" -exec rm -rf {} +
また python -B
オプションを付けると、キャッシュを作らずに実行できます。
まとめ
-
__pycache__
はPythonのキャッシュ(.pyc) -
import
するときはまずここを見に行く - キャッシュなので消しても問題ない。Gitに入れない
- 不要なときは生成スキップも可能(
python -B
)