Skip to content
チュートリアル
Python
Understanding pycache in Python: Everything You Need to Know

Pythonのpycacheの理解:知っておくべきすべて

もしPythonスクリプトを実行したことがあるなら、プロジェクトディレクトリに作成される特別なフォルダに気づいたかもしれません。この__pycache__というフォルダは初めは不思議に思えるかもしれませんが、Pythonがスクリプトを実行する際に重要な役割を果たしています。この記事では__pycache__フォルダについて解説し、その目的、動作方法、およびPythonプロジェクトで効果的に管理する方法を説明します。

Pythonはインタプリタ型の言語であり、ソースコードをコンピュータが理解して実行できる形式に変換します。この変換プロセスには時間がかかることがあり、特に大きなスクリプトの場合には更に遅くなることがあります。このプロセスを速くするために、Pythonは.pycファイルとして変換されたコードを__pycache__フォルダに保存します。これらのファイルは、Pythonが元のソースコードよりもはるかに高速に実行できるバイトコードの形式です。

Python Pandasのデータフレームから簡単にデータ可視化を作成したいですか?

PyGWalkerは、データ探索と可視化のためのPythonライブラリです。PyGWalker (opens in a new tab)は、pandasデータフレーム(およびpolarsデータフレーム)をTableauスタイルのユーザーインターフェースに変換し、Jupyter Notebookでのデータ分析とデータ可視化のワークフローを簡素化できます。

データ可視化のためのPyGWalker (opens in a new tab)

Pythonにおけるpycacheとは何ですか?

__pycache__フォルダは、Pythonがスクリプトを実行する際に作成するディレクトリです。このフォルダには、Pythonスクリプトのコンパイル済みバージョンである.pycファイルが含まれています。これらのファイルは、Pythonインタプリタによって実行できるローレベルの命令セットであるバイトコード形式です。

Pythonスクリプトを実行する際、インタプリタはまず__pycache__フォルダに対応する.pycファイルがあるかどうかをチェックします。もし存在し、かつ.pycファイルが最新である場合、Pythonは元のスクリプトの代わりにこのファイルを実行します。これは、バイトコードの実行がソースコードの解釈よりもはるかに高速であるためです。

しかし、.pycファイルが古い(つまり、.pycファイルが作成されてからソーススクリプトが変更された)場合、または.pycファイルが存在しない場合、Pythonはスクリプトを再コンパイルし、__pycache__フォルダに.pycファイルを更新または作成します。

pycacheフォルダはどこにありますか?

__pycache__フォルダは、実行されているPythonスクリプトと同じディレクトリに配置されます。たとえば、my_projectというディレクトリにmain.pyというスクリプトがある場合、main.pyを実行するとmy_projectディレクトリに__pycache__フォルダが作成されます。

__pycache__フォルダの中には、親ディレクトリで実行された各Pythonスクリプトに対応する.pycファイルがあります。これらのファイルの名前は、元のスクリプトの名前と一致しますが、.pyの代わりに.pyc拡張子が付いています。

pycacheはどのようにPythonスクリプトの実行を高速化しますか?

__pycache__フォルダとその.pycファイルは、スクリプトの事前コンパイルバージョンであるバイトコードを保存することで、Pythonスクリプトの実行を高速化します。バイトコードは、ソースコードよりも低レベルの形式であり、機械語に近いため、Pythonの実行速度が向上します。

Pythonスクリプトを実行する際、インタプリタはソースコードを解析し、抽象構文木(AST)に変換し、このASTをバイトコードにコンパイルする必要があります。このプロセスは、特に大きなスクリプトの場合、時間がかかることがあります。

pycacheフォルダを削除できますか?

はい、__pycache__フォルダを削除することができます。このフォルダを削除してもPythonスクリプトの実行には影響しません。ただし、次にスクリプトを実行すると、Pythonがバイトコードに再コンパイルする必要があります。これにより、初期実行がわずかに遅くなる場合があります。これは、Pythonが__pycache__フォルダとその中に含まれる.pycファイルを再作成する必要があるためです。

__pycache__フォルダがプロジェクトディレクトリを混乱させるので心配な場合は、簡単なコマンドを使用してすべての__pycache__フォルダを再帰的に削除することができます。以下にその方法を示します:

find . -type d -name __pycache__ -exec rm -r {} \+

このコマンドは、現在のディレクトリおよびそのサブディレクトリにある__pycache__という名前のすべてのディレクトリを検索し、削除します。

Pythonでpycacheファイルの作成を無効化する方法はありますか?

__pycache__フォルダとその.pycファイルは、Pythonスクリプトの実行を高速化するのに役立ちますが、コンパイル時間が無視できるような小さなスクリプトで作業している場合や、プロジェクトディレクトリを__pycache__フォルダで混乱させたくない場合など、作成を無効化したい場面もあるかもしれません。

__pycache__フォルダと.pycファイルの作成を無効化するには、PYTHONDONTWRITEBYTECODE環境変数を設定することができます。次のコマンドを使用して、直接ターミナルで設定できます:

export PYTHONDONTWRITEBYTECODE=1

このコマンドを実行すると、現在のターミナルセッションの終了まで、Pythonは__pycache__フォルダや.pycファイルを作成しません。この変更を恒久的にする場合は、上記の行をシェルの起動ファイル(例:Bashシェルの場合は~/.bashrcまたは~/.bash_profile)に追加することができます。

Gitでpycacheファイルを無視する方法はありますか?

Gitを使用する際には、バージョン管理の必要がない特定のファイルやディレクトリを無視することがよくあります。__pycache__ディレクトリは、異なる環境間で共有する必要のない、マシン固有のコンパイル済みバイトコードが含まれているため、このために使用することができます。

Gitで__pycache__ディレクトリを無視するには、.gitignoreファイルに次の行を追加します:

__pycache__/

この行は、プロジェクト内のどこにあっても__pycache__ディレクトリを無視するようにGitに指示します。今後は、git statusを実行すると、__pycache__ディレクトリとその内容が未追跡のファイルとして表示されなくなります。

__pycache__フォルダを削除するとどうなりますか?

__pycache__フォルダを削除しても、Pythonスクリプトの実行には影響しません。__pycache__フォルダはPythonスクリプトの実行には必要ありません。ただし、以前に実行されたスクリプトの実行を高速化するために使用されています。

__pycache__フォルダを削除し、その後Pythonスクリプトを実行すると、Pythonはスクリプトをバイトコードに再コンパイルし、__pycache__フォルダと対応する.pycファイルを再作成します。このプロセスはスクリプトの最初の実行をわずかに遅くするかもしれませんが、その後の実行は、Pythonが.pycファイルに格納されているバイトコードを使用できるため、より高速化されます。


それでは、Pythonの__pycache__に関するよくある質問に答えましょう。

よくある質問

  1. __pycache__フォルダの目的は何ですか?

__pycache__フォルダは、スクリプトを実行するとPythonによって作成されます。これにはPythonスクリプトのコンパイルされたバージョンである.pycファイルが含まれています。これらのファイルはバイトコードと呼ばれる形式であり、Pythonはオリジナルのソースコードよりも高速に実行できます。

  1. __pycache__フォルダを削除しても問題ありますか?

はい、__pycache__フォルダを削除しても問題ありません。このフォルダを削除してもPythonスクリプトの実行には影響しません。ただし、次回スクリプトを実行する際には、Pythonがスクリプトをバイトコードに再コンパイルする必要があるため、最初の実行がわずかに遅くなる可能性があります。

  1. Gitで__pycache__ファイルを無視するにはどうすればよいですか?

Gitで__pycache__ディレクトリを無視するには、.gitignoreファイルに次の行を追加します:__pycache__/。これにより、プロジェクト内のどこにあっても__pycache__ディレクトリを無視するようにGitに指示します。