◀ 4.

precompile standard library とは(Pythonインストール)

Pythonの「Precompile standard library」は、従来のWindows用フルインストーラーで標準ライブラリのPythonソースを事前にバイトコードへ変換するオプションです。Railsのアセット処理や、アプリの実行速度を高める最適化とは異なります。

旧画面の参考資料:次の画像は保存されていたAdvanced Options画面です。画像内に正確なPython版番号はないため、ファイル名の日付から版を推定しません。赤枠のチェック項目だけを説明対象とし、ほかの項目の選択を一括で推奨するものではありません。

 

 

上記の画像のようにPythonのインストール過程で「precompile standard library」という項目がある。

これは、インストールした標準ライブラリを予めコンパイルしてpycファイルを作成しておくかどうかというオプションである。

通常のソースモジュールのimportでは、有効なキャッシュがなければコンパイルされます。ただし、アクセスすれば必ずディスクにpycが作られるわけではありません。書込権限や起動オプションなどの条件を、以下で分けて説明します。

この記事の要点
  • Python インストーラの "precompile standard library" オプションの意味
  • 機能: 標準ライブラリを .pyc に事前コンパイルする。モジュール読込時の変換を先に行うもので、速度差は条件による
  • チェックの有無はバイトコードキャッシュを作る時期に関わる。通常のimportでも必要に応じて生成するが、保存できるとは限らない
  • インストール時の処理時間と後のモジュール読込を分けて判断する。プログラム自体の実行速度を上げる設定ではない

何をコンパイルするのか

ここでいう標準ライブラリは、Pythonに付属するモジュール群です。そのうちPythonソースの .py ファイルを処理し、CPythonが読み込める .pyc というバイトコードキャッシュを作ります。Python本体をCソースからビルドする操作でも、利用者のプロジェクトやpipの全パッケージを高速化するスイッチでもありません。

通常のソースモジュールでは、__pycache__ ディレクトリの中に処理系の版などを含む名前でキャッシュを保存します。同じ場所にある .py と .pyc は、編集対象のソースと再利用できる読込用の成果物という関係です。pycを生成してもソースが不要になるという意味ではなく、キャッシュだけを別のPython版へコピーする運用も勧めません。

事前コンパイルとモジュールの実行は別の段階です。キャッシュを作る作業は、そのモジュールの機能を呼び出して動作を検査することではありません。たとえば外部接続が必要な処理や追加データの読込は、コンパイル成功だけでは確認できません。インストール後の利用可否は、必要な機能を対象環境で試す検証と分けます。

チェックすると何が変わるのか

観点読み分け方
チェックありインストール時に先にコンパイルする。対象の処理に時間がかかる代わりに、後の読込時にその分の変換を省ける可能性がある。
チェックなしその事前処理を指定しない。通常のimportでは必要に応じてコンパイルする。すべてのライブラリが起動時に一括処理されるわけではない。
実行速度pycから読み込むこと自体は、同じ処理を繰り返すPythonプログラムの実行速度を向上させる保証ではない。
保存条件書込権限、キャッシュ抑止、ソース更新、処理系の版などにより再利用・保存の可否が変わる。

「初回ロードが必ず速い」「体感差がない」「何秒短縮できる」といった断定はできません。すでに使えるキャッシュがあるか、どのモジュールを読み込むか、ディスクや実行環境がどうかで結果が違います。選択に迷ったら、その配布版の標準設定と管理方針を確認し、速度改善のために既存環境を入れ直すことは避けます。

最初のimportで必ずpycができるとは限らない

有効なキャッシュがある通常のソースモジュールでは、それを読込に利用できます。ソースが更新されるなどしてキャッシュが使えなければ、再度コンパイルが必要です。一方、組込みモジュールや拡張モジュールまで、同じ .py からの処理をするわけではありません。また、同じプロセス内で読込済みのモジュールをimportすることと、新しいプロセスでディスクのキャッシュを使うことも区別します。

Pythonを -B オプションで起動した場合や、PYTHONDONTWRITEBYTECODE が設定されている場合、import時のpyc書込みは抑止されます。これは既存のキャッシュを消す指示ではありません。キャッシュ先へ書き込めない環境でも、ソースを読み込んで動作することがあり、「pycがないから標準ライブラリが壊れている」とは判断できません。

確認のために管理者権限を付けたり、標準ライブラリの権限を広げたりする必要はありません。読込対象のPythonとファイルの所在を先に確認します。既存の __pycache__ を一括削除する、システムのPythonへ再コンパイルをかける、といった変更はこの説明の手順には含めません。

管理者が導入時にキャッシュを用意することは、後からライブラリの場所へ書き込めない利用者にも役立ちます。ただし、用意されたキャッシュをその実行環境で読み込めることが前提です。事前生成したという事実だけで、すべての端末の権限や配布構成の問題まで解消したとは判断しません。

CompileAllとインストーラーの世代

公式のフルインストーラー資料では、コマンドラインの CompileAll は .py を .pyc へコンパイルする指定で、一覧上の既定値は0です。CPython 3.13.0の画面定義でも、Advanced Optionsのチェックボックス名はCompileAllです。資料の既定値と、既存設定を引き継いだ個々の画面の選択状態は同一と決めつけません。

この項目を説明する対象は従来型のWindows用フルインストーラーです。Python 3.14では同インストーラーが非推奨となり、公式資料は3.16以降に提供しないとしています。Python Install Managerは別の導入経路で、この古いAdvanced Options画面が必ず現れるわけではありません。macOSのインストーラーやLinuxのパッケージ管理にも同じチェック項目があるとは案内しません。

なお、Python 3.13.0のソースを確認したことは、掲載画像が3.13.0だという証拠ではありません。画像の版は不明のままです。新規導入先や組織の配布手順を選ぶときは、今使っているインストーラーの種類と公式ガイドを合わせて確認してください。

小さな隔離検証で確かめられること

この説明に付属する検査はPython 3.12の一時ディレクトリ内だけに教材の .py を作り、compileallによるキャッシュ生成、通常import、-Bでの書込み抑止、ソースを書き換えた後の再読込を調べるものです。標準ライブラリ、既存アプリ、インストール済みパッケージには書き込みません。キャッシュ生成を実際に確かめることと、Windowsインストーラー全体の完了を確認することは別です。

インストーラーのGUI操作、全標準ライブラリの処理結果、アクセス権の異なる端末、起動時間の比較は未検証です。ここでは性能測定値を示さず、キャッシュの役割と選択肢の範囲を説明しています。

公式資料で対象を確認する

子ページ

子ページはありません

同階層のページ
  1. Python3 のインストール
  2. pipによるパッケージのインストール
  3. Python3 のインストール (Windows10)
  4. precompile standard library とは