pythonの__pycache__は消してもいい?Pythonが「勝手に作るフォルダ」の正体と生存理由
Pythonの学習を始めて、自分の書いたプログラムを実行したあとのことです。
ふとフォルダの中を見ると、身に覚えのない __pycache__という名前のフォルダが出来ていることに気づきませんか。
自分で作った覚えがないものが自動的に生成されると、ウイルスではないかと不安になる方もいるかもしれません。 あるいは、プロジェクトをスッキリさせたくて、ついゴミ箱に入れたくなる衝動に駆られることもあるでしょう。
今回は、エンジニア歴10年の私が、この謎めいたフォルダの正体を初心者の方にも分かりやすく解説します。 なぜこのフォルダが生まれ、どのような役割を果たしているのか、その生存理由を知ればPythonへの理解がさらに深まるはずです。
そもそも「pycache」って何?消しても大丈夫?¶
まず、皆さんが一番気になっているであろう疑問にズバリとお答えしましょう。
この __pycache__ というフォルダは、消してしまっても全く問題ありません。
このフォルダを削除したからといって、あなたが一生懸命書いたソースコードが消えることはありません。 また、次にプログラムを実行すれば、Pythonが自動的にこのフォルダを再生成してくれます。
なぜ消しても大丈夫だと言い切れるのか¶
それは、このフォルダの中身が 一時的なキャッシュデータ に過ぎないからです。 Webブラウザの閲覧履歴やキャッシュを消してもサイトが見られなくならないのと同様に、Pythonの実行には影響しません。
とはいえ、Pythonがわざわざ手間をかけて作っている以上、そこには何らかの意図があるはずです。 次は、なぜPythonが私たちのフォルダを勝手に賑やかにしているのか、その理由を見ていきましょう。
フォルダが作られるタイミング¶
このフォルダは、あなたがPythonファイルを インポート(import) した瞬間に生成されます。 メインで実行しているファイルだけでなく、そこから呼び出される部品としてのファイルに対しても作られます。
逆に言えば、どこからもインポートされない単一のスクリプトだけを動かしている場合は、作成されないこともあります。 もしこのフォルダを見かけたら、それはあなたのプログラムが複数のファイルを連携させて動いている証拠でもあります。
【関連記事】 Pythonの仮想環境(venv)って何のためにある?プロジェクトごとに混ぜない管理法
「pycache」の中身とバイトコードの仕組み¶
フォルダを開いてみると、中には .pyc という拡張子のファイルが並んでいるはずです。
ファイル名には cpython-312 のように、使っているPythonのバージョンが含まれていることにも気づくでしょう。
このファイルこそが、前回の記事でも触れた バイトコード と呼ばれるデータが保存されたものです。 Pythonが人間向けの言葉(ソースコード)を、自分たちが理解しやすい言葉(中間データ)に翻訳した結果です。
翻訳作業を貯金している¶
Pythonはプログラムを動かすたびに、ソースコードを1行ずつ解読して実行する仕組みを持っています。 しかし、毎回1から翻訳し直すのは、たとえコンピューターであっても少しだけ時間がかかります。
そこでPythonは、一度翻訳した結果を __pycache__ に保存して再利用しようと考えました。
これがいわゆるキャッシュの仕組みであり、2回目以降の実行をスムーズにするための知恵なのです。
中身がバイナリデータである理由¶
試しにこの .pyc ファイルをメモ帳などのテキストエディタで開いてみてください。 おそらく、意味の分からない記号や文字化けしたような内容が表示されるはずです。
これは人間が読むためのものではなく、Pythonの仮想マシンが高速に読み取るために最適化された形式だからです。 中身が読めないからといって、決してファイルが壊れているわけではないので安心してくださいね。
なぜこのフォルダは生存し続けているのか?¶
起動が少し速くなるくらいなら、フォルダが汚れるからいらない、と思う方もいるかもしれません。 しかし、エンジニアの視点から見ると、この仕組みは非常に合理的で、生存し続けるだけの価値があります。
特に大規模なプロジェクトや、多くのライブラリを組み合わせて使う現代の開発において、この恩恵は無視できません。 具体的に、どのようなメリットがあるのかを整理してみましょう。
1. 巨大なプログラムの起動を劇的に速くする¶
数行のコードであれば差は体感できませんが、数万行、数十万行のプログラムになると話は別です。 起動のたびに数秒待たされるのと、キャッシュを使って一瞬で立ち上がるのでは、開発の快適さが天と地ほど変わります。
2. コンパイル時間を節約する¶
複雑な処理を含むプログラムほど、ソースコードからバイトコードへの変換には計算資源を使います。 キャッシュがあることで、PCのCPUやメモリの負荷を抑え、スマートに実行できる環境を整えてくれているのです。
Pythonの管理能力の高さ¶
Pythonは、ソースコード(.py)が更新されたかどうかを常にチェックしています。 もしあなたがコードを1文字でも書き換えたなら、Pythonは古いキャッシュを捨て、自動的に新しいキャッシュを作成します。
このため、キャッシュのせいで古いプログラムが動いてしまうといったトラブルは、基本的には発生しません。
この 自動管理 こそが、 __pycache__ が裏側でひっそりと、しかし力強く生存している理由です。
【関連記事】 コードの裏側で何が起きてる?Pythonが実行されるまでの仕組み
エンジニアの一次情報:現場での「pycache」の扱い方¶
エンジニア歴10年の私の経験から、プロの現場でこのフォルダをどう扱っているかをお伝えします。 初心者の方がこれからチーム開発や公開作業を行う上で、知っておくべき 暗黙のルール があります。
一言で言うなら、自分のPCの中では便利に使い、他人には渡さない というのが鉄則です。 なぜ、便利なのに他人には渡してはいけないのでしょうか。
Gitなどのバージョン管理には絶対に含めない¶
プロの開発者は、GitHubなどのツールを使ってコードを共有する際、このフォルダを共有対象から外します。
なぜなら、 __pycache__は実行するPCの環境(OSやPythonのバージョン)に依存して生成されるからです。
他人のPCで作られたキャッシュを自分のPCで使おうとすると、予期せぬエラーの原因になることがあります。 そのため、後述する .gitignore というファイルを使って、このフォルダを無視するように設定します。
現場で起きた小さなトラブル¶
以前、新人のメンバーがこのフォルダをGitに含めてコミットしてしまったことがありました。 すると、チーム全員のフォルダに、その新人のPCで作られた謎のキャッシュが大量にコピーされてしまったのです。
これ自体で致命的なバグが起きることは稀ですが、プロジェクトの履歴が不要なファイルで埋まってしまいました。 キャッシュはあくまで自分のPCのもの、という意識を持つことが、プロへの第一歩と言えます。
比較:キャッシュがある場合とない場合の違い¶
ここで、キャッシュの有無による状態の違いを表で比較してみましょう。 どちらが良い・悪いではなく、特性を理解することが大切です。
| 特徴 | キャッシュ( __pycache__)あり |
キャッシュなし |
|---|---|---|
| 起動速度 | 翻訳済みのため非常に高速 | 翻訳作業が必要なため、わずかに遅い |
| ディスク容量 | 少しだけ消費する | 全く消費しない |
| フォルダの見栄え | フォルダが増えて少し賑やかになる | ソースコードだけでスッキリする |
| 信頼性 | 最新のソースコードと同期される | 常に最新の状態が保証される |
| 推奨環境 | 普段の開発や本番の実行時 | フォルダを綺麗にしたい時、環境配布時 |
どちらの状態が標準か¶
基本的には ある状態がPythonの標準 です。 Pythonは効率を重視して設計されているため、デフォルトではこのフォルダを作るように動きます。
特別な理由がない限りは、Pythonの判断に任せておくのが最も安定します。 もしどうしても消したくなったら、削除しても実害はないということを思い出してください。
pycache を作らせない設定方法¶
もしあなたが、どうしても自分のプロジェクトフォルダを美しく保ちたいと考えるなら、対策はあります。 Pythonには、このフォルダを生成させないための設定がいくつか用意されています。
ただし、これを設定すると毎回プログラムが少しだけ遅くなる可能性があることを覚悟しておきましょう。 ここでは代表的な2つの方法を紹介します。
方法1:環境変数を設定する¶
PC全体の設定として、Pythonにキャッシュを作らせないように命じることができます。 PYTHONDONTWRITEBYTECODE という環境変数を 1 に設定するだけです。
# LinuxやMacの場合のコマンド例
export PYTHONDONTWRITEBYTECODE=1
これを設定しておけば、どんなPythonプログラムを動かしても __pycache__が作られることはありません。
一時的な実験などで、フォルダを汚したくない場合には非常に有効な手段です。
方法2:実行時にオプションを指定する¶
特定のプログラムを実行するときだけキャッシュを制限したい場合は、実行コマンドに -B を付けます。
python -B my_script.py
この -B オプションは、その実行の間だけバイトコードを書き込まないようにPythonに指示を出します。 環境を汚さずにさっとテストをしたい時に、プロのエンジニアも時々使うテクニックです。
チーム開発の常識「.gitignore」に書く内容¶
前述した通り、プロの世界では __pycache__を他人と共有しません。
そのために使われるのが .gitignore という名前のテキストファイルです。
このファイルの中に特定のパターンを記述しておくことで、Gitというツールがそのファイルを無視してくれます。 Pythonプロジェクトを開始する際、最も最初に準備すべきファイルの一つです。
# .gitignore の中身の例
__pycache__/
*.pyc
なぜこれが必要なのか¶
これを設定し忘れると、あなたがファイルを保存するたびに、裏側で勝手に更新されるキャッシュまで共有されてしまいます。 すると、チームの他のメンバーから不要なファイルが混じっているよ、と注意されてしまうかもしれません。
最近のエディタ(VS Codeなど)では、Python用の .gitignore を自動で生成してくれる機能もあります。 自分のプロジェクトフォルダを守り、チームの和を守るための重要なステップだと覚えておきましょう。
【実践】キャッシュが本当に効いているか確認してみよう¶
理屈では速くなるとわかっていても、実際に目で見てみないと納得できないこともありますよね。 実は、Pythonのコードを使って、今動いているファイルがキャッシュを使っているか調べる方法があります。
以下のコードを、適当なファイル(例:check_cache.py)に貼り付けて実行してみてください。 ただし、このファイルを別のファイルから import する必要があります。
import sys
def check():
# 読み込まれているモジュールのキャッシュ状態を表示
for name, module in sys.modules.items():
if hasattr(module, '__cached__') and module.__cached__:
print(f"モジュール {name} はキャッシュを使用中: {module.__cached__}")
実験の手順¶
- 上記の内容を check_cache.py として保存します。
- 別のファイル(main.py)で
import check_cacheを行い、check_cache.check()を実行します。 - 1回目の実行後、フォルダに
__pycache__ができていることを確認します。 - 2回目の実行で、キャッシュファイルが読み込まれていることが出力されます。
このように、Python自身がどのキャッシュファイルを使っているかを知っていることが分かると、仕組みがより身近に感じられませんか。 裏側でPythonが頑張ってくれている様子を、ぜひ自分の目で確かめてみてください。
初心者がよく抱く「pycache」への誤解¶
ここでは、この謎のフォルダについてよくある勘違いを解いておきましょう。 正しく知ることで、余計な心配をせずにプログラミングに集中できるようになります。
誤解1:ウイルスが勝手に作ったファイルだ¶
前述の通り、これはPythonの正常な機能です。 アンダーバーが怪しく見えたりするかもしれませんが、100%安全なものです。
誤解2:これを消すとプログラムが動かなくなる¶
消しても、次の実行時にPythonが魔法のように作り直してくれます。 消すと壊れるかも、という恐怖心は捨ててしまって構いません。
誤解3:キャッシュがあるからプログラムの計算が速くなる¶
これは非常に多い誤解です。 キャッシュはあくまで 読み込み(起動) を速くするものであり、計算アルゴリズムなどを速くするものではありません。
もしあなたのプログラムの計算が遅いなら、それはキャッシュのせいではなく、コードの書き方を工夫する必要があります。 目的と手段を混同しないことが、エンジニアとしての正しい思考法です。
【関連記事】 「実行時間が終わらない…」を卒業する!あなたのコードを100倍速くする計算量の考え方
まとめ¶
いかがでしたでしょうか。
最初は邪魔なゴミのように見えていた __pycache__ フォルダが、実はあなたの開発を快適にするためのPythonの親切心だったことが伝わったなら嬉しいです。
このフォルダは、Pythonが効率よく、そして賢く振る舞うための 作業机の整理整頓 のようなものです。 普段は気にせずそのままにしておき、誰かにコードを渡すときだけお掃除してあげるのが、最もスマートな付き合い方です。
今回のポイントは以下の通りです。
__pycache__は、Pythonがコードを翻訳した結果(バイトコード)を保存する場所。- 2回目以降のプログラムの 起動を速くする ための仕組み。
- フォルダや中身を 消しても全く問題ない が、実行すれば再び作られる。
- Git管理時には 含めない のがプロの開発マナー(.gitignoreを活用)。
- どうしても作りたくない場合は、設定やオプションで 無効化 も可能。
プログラミングの世界には、こうした自動で作られる不思議なものがたくさん存在します。 一つひとつの意味を知るたびに、あなたはコンピューターという道具をより使いこなせるようになっていきます。
ここまでお読みいただきありがとうございます。