Edited at

__pycache__とはいったいなんなのか?


__pycache__とはいったいなんなのか?

開発中に幾度となく目にします。

知らぬ間に追加されていて、消してよいのか悪いのかわからず放って置くものの、目障りでしょうがない。

一体誰なんだお前は!

atom.PNG


そもそも読み方わからない問題

pycache?なんだそれ?

pyはわかるけどせめてぱっと見で意味が通る名前にしてくれよ~

しかし私はただの馬鹿だったようです。

cache.PNG


キャッシュ

よく使うデータへのアクセスを速くするために、より高速な記憶装置に一時的に保存する仕組み。

ASCII.jpデジタル用語辞典より


プログラマなら当然知っているべき単語でした。

今まで「パイケイク」と読んでいましたが「パイキャッシュ」が正解であるようですね…


__pycache__が何してるかわからない問題

もうgoogle翻訳にかけた時点でほとんどわかっているのですが、続けましょう。

pythonファイルを実行したとき、コンパイルされたモジュールが__pycache__の中pycファイルにキャッシュされます。

これを残しておけばコンパイルを経ずにプログラムを実行することができるので実行が速くなります。

プログラムを変更するたびに書き換えられます。

消しても問題ありませんが、実行が少し遅くなります。


__pycache__君、帰っていいよ

頑張ってくれてはいるんだけどね。

たまにおせっかいだなぁ…なんて。

どうしても邪魔だと思う方へ


__pycache__を消す方法1(コマンドで指定)

$ python -h

を実行すると方法を教えてくれます。

-B     : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x

例えば、hoge.pyを実行するときにキャッシュを作られたくなければ

$ python -B hoge.py

このように-Bを付けることで解決します。


__pycache__を消す方法2(環境変数)

環境変数の変数名をPYTHONDONTWRITEBYTECODEに、値を適当に設定することでキャッシュを作るのをやめるようです。

値は1が無難でしょう。

実際にやったことはない。


__pycache__を消す方法3(プログラムで指定する)

import sys

sys.dont_write_bytecode = True

このように書けばキャッシュを作らなくなります。