Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Pythonの__pycache__って何?バイトコードの世界を覗いてみた
Search
Sekineee
December 11, 2025
1
24
Pythonの__pycache__って何?バイトコードの世界を覗いてみた
Sekineee
December 11, 2025
Tweet
Share
More Decks by Sekineee
See All by Sekineee
Cursorの効果的な最新情報収集戦略
sekineee
0
20
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Color Theory Basics | Prateek | Gurzu
gurzu
0
200
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.1k
Unsuck your backbone
ammeep
671
58k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
130
Build your cross-platform service in a week with App Engine
jlugia
234
18k
AI: The stuff that nobody shows you
jnunemaker
PRO
2
270
Done Done
chrislema
186
16k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
83
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
The SEO identity crisis: Don't let AI make you average
varn
0
330
Transcript
Pythonの__pycache__って何? バイトコードの世界を覗いてみた 2025/12/11 みんなのPython勉強会#119 関根 白麗 @sekineee_
関根 白麗 株式会社スリーシェイク Sreake事業部アプリケーション開発支援チーム • 生成AIアプリケーションの開発 • エンジニア1年目から、業務ではずっとPythonを使用 自己紹介
技術的負債を解消し、イノベーションを加速させる SREの知⾒を武器にするアプリケーションエンジニア募集 OUR MISSION インフラをシンプルにしてイノベーションが起こりやすい世界を作る THE CHALLENGE モノリスを解きほぐし 未来を⾒据えた アーキテクチャを設計
YOUR GROWTH SREのエキスパート と共に市場価値の⾼い 技術を本番環境で実践 OUR CULTURE 技術的負債から逃げず オーナーシップを持つ プロフェッショナル集団 採用ページ
なぜこのテーマにしたか エンジニア1年目のある日、プロジェクトを見ていたら… 何だコイツ。。。 →調べてみたら、キャッシュなのであまり気にしなくて良さそう→放置() ↓(数年後) →LT発表のテーマどうしよう。。→あ、__pycache__ 深掘ろう!
そもそも__pycache__とは何か • Pythonが自動生成するディレクトリ • モジュール(.py)の読み込みを高速化するためのキャッシュ • バイトコードを保存(.pyc) • いつ作成・更新されるか? ◦
プログラム実行時に、モジュールが初めてインポートされたとき ◦ キャッシュが作られてから、モジュールに変更を加えた後に、 プログラムを実行したとき 参考) https://docs.python.org/ja/3.14/tutorial/modules.html#compiled-python-files https://docs.python.org/ja/3.14/faq/programming.html#how-do-i-create-a-pyc-file
なぜ速くなるのか? キャッシュなし キャッシュあり ソースコード(.py)を読み込む コンパイル (使用するモジュールを 全てコンパイル) Python仮想マシンが バイトコードを逐次実行 ソースコード(.py)を読み込む
Python仮想マシンが バイトコードを逐次実行 コンパイル (コンパイル済みのモジュールを 使用するので時間短縮)
バイトコードとは? • ソースコードとネイティブ・コード(マシン語)の中間コード • 仮想マシンがバイトコードを読み取って実行 • 異なるOSやハードウェアでも同じファイルが動く(※Pythonは違う) ソースコード(.py) ネイティブ・コード(マシン語) バイトコード(中間コード)
バイトコード Windows + Intel CPU ネイティブ・ コードで実行 仮想マシン macOS + Apple Silicon ネイティブ・ コードで実行 Linux + ARM CPU ネイティブ・ コードで実行 仮想マシン 仮想マシン コンパイル 仮想マシンが解釈・実行
__pycache__の中身を見る:Hex Editorを使用 • .pycファイルはバイナリ形式であるため、そのままでは読めない • Hex Editor(バイナリエディタ)で開くと、生のバイト列を確認可 ソースコード バイトコード
__pycache__の中身を見る:disモジュールを使用 • disモジュールは、バイトコードを人間が読める形式に逆アセンブルする 標準モジュール • コマンドラインやスクリプト内で使用可能 (例:python3 -m dis file.py)
• 行番号、命令、引数などが表示され、処理内容を理解しやすい 行番号 バイト位置 命令 引数
まとめ • __pycache__は実行速度向上のためのキャッシュ • バイトコードが保存される(.pyc) • キャッシュがある場合は、ソースコードからバイトコードへの再度の コンパイルは回避される
ありがとうございました ご質問・ご相談はお気軽にお問い合わせください @sekineee_ | https://3-shake.com/