Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでバイトコード(.pyc)ファイルを生成する4つの方法を徹底解説

Pythonのバイトコード(.pyc)ファイルとは?

Pythonは、プログラムを実行する前に、ソースコードを自動的にコンパイルし、「バイトコード」と呼ばれる中間形式のコードへと変換します。

モジュールを初めてインポートしたとき、あるいはソースファイルが新規作成・更新されたときにコンパイルが行われ、その結果として.pycファイルが生成されます。Python 3以降では、.pyファイルと同じディレクトリではなく、__pycache__というサブディレクトリ内に作成される点に注意してください。

この仕組みは時間の節約のためのもので、次回以降に同じプログラムを実行するとき、Pythonはコンパイルのステップをスキップできるようになります。

直接実行したスクリプトには.pycは作られない

pythonコマンドで直接実行したスクリプト本体に対しては、.pycファイルは生成されません。.pycが作成されるのは、あくまで「インポートされたモジュール」だけです。たとえば、file1.pyが別のfile2.pyをインポートしている場合、.pycが作られるのはfile2.py側のみです。

方法1:モジュールをインポートする(最も簡単)

.pycファイルを作る最も簡単な方法は、対象のモジュールをインポートすることです。たとえばMainP.pyというモジュールがあるなら、次のように実行します。

>>> import MainP
>>>

これだけで、__pycache__ディレクトリ内にMainPのバイトコードが自動生成されます。

方法2:py_compileモジュールで手動コンパイルする

インポートせずに.pycファイルを作成したい場合は、標準ライブラリのpy_compileモジュールを使います。このモジュールを使うと、任意のモジュールを手動でコンパイルでき、対話シェルからでもpy_compile.compile()関数で実行できます。

>>> import py_compile
>>> py_compile.compile('test.py')
'__pycache__\test.cpython-36.pyc'
>>>

上記のステートメントをPythonシェルで実行すると、__pycache__フォルダ内(Python 3の場合)にtest.pyの.pycファイルが作成されます。環境によっては、test.pyと同じ場所に作成されることもあります。

Pythonでバイトコード(.pyc)ファイルを生成する4つの方法を徹底解説

複数のファイルを一度にコンパイルする

複数のファイルをまとめてコンパイルしたい場合は、py_compile.main()にファイル名のリストを渡します。

>>> # 複数のファイルを一度にコンパイルする
>>> py_compile.main(['test1.py', 'test2.py', 'test_sample1.py', 'test_sample2.py'])
0

実行後、4つのファイルそれぞれに対応するコンパイル済みファイルが生成されていることが確認できます。

Pythonでバイトコード(.pyc)ファイルを生成する4つの方法を徹底解説

方法3:compileall.compile_dir()でフォルダごとコンパイルする

特定のフォルダ内にあるすべての.pyファイルをコンパイルしたい場合は、compileallモジュールのcompile_dir()関数が便利です。

>>> # 特定フォルダ内のすべての.pyファイルをコンパイルする
>>> import compileall
>>> compileall.compile_dir('gmplot')
Listing 'gmplot'...
Compiling 'gmplot\__init__.py'...
Compiling 'gmplot\color_dicts.py'...
Compiling 'gmplot\gmplot.py'...
Compiling 'gmplot\google_maps_templates.py'...
Compiling 'gmplot\setup.py'...
True

実行すると、「フォルダ名\__pycache__」の場所に各ファイルの.pycファイルが作成されます。

Pythonでバイトコード(.pyc)ファイルを生成する4つの方法を徹底解説

方法4:コマンドラインから一括コンパイルする

ひとつまたは複数のディレクトリ内の全ファイルをまとめてコンパイルしたい場合は、コマンドラインからcompileallモジュールを直接実行します。

C:\Users\rajesh> python -m compileall
Listing 'C:\Python\Python361\DLLs'...
Listing 'C:\Python\Python361\lib'...
Compiling 'C:\Python\Python361\BeautifulSoup_script1.py'...
Compiling 'C:\Python\Python361\EDA_python1.py'...
Compiling 'C:\Python\Python361\MainP.py'...
...
Compiling 'C:\Python\Python361\variable_arguments_list1.py'...

実行後、__pycache__ディレクトリ内に、対象ディレクトリ内のすべてのファイルに対応する.pycファイルが作成されていることを確認できます。

Pythonでバイトコード(.pyc)ファイルを生成する4つの方法を徹底解説

まとめ:用途別の使い分け早見表

方法適した場面
import文モジュール利用時に自動的に生成させたい場合
py_compile.compile()指定した1ファイルを明示的にコンパイルしたい場合
py_compile.main()複数ファイルを指定して一括コンパイルしたい場合
compileall.compile_dir()フォルダ内の全.pyファイルを再帰的にコンパイルしたい場合
python -m compileallコマンドラインからディレクトリ全体を一括コンパイルしたい場合

日常的には、モジュールのインポート時に自動生成される仕組みに任せるだけで十分ですが、配布用の準備や起動時間の短縮など、意図的にバイトコードを作りたい場面では、py_compileやcompileallが強力な味方になります。用途に応じて上手く使い分けてみてください。

  1. PythonのpyqrcodeモジュールでQRコードを生成する方法

    QRコードは、白い背景の上に黒い四角形を格子状に配置した2次元コードで、カメラなどの画像読み取り装置によって読み取ることができます。商業用途での在庫追跡や決済、ウェブサイトへのログインなど、スマートフォンユーザー向けのさまざまなアプリケーションで広く利用されています。Pythonではpyqrcodeモジュールを使うことで、簡単にQRコードを生成できます。QRコードには、データを効率的に格納するための4つの標準エンコードモード(数値モード、英数字モード、バイト/バイナリモード、漢字モード)が用意されています。英数字のQRコードを生成するpyqrcodeモジュールには、QRコードを生成するためのc

  2. Google ColaboratoryでPythonコードを実行する方法を徹底解説

    Google Colaboratory(通称:Colab)は、面倒なセットアップ不要でブラウザ上ですぐに使える、無料のクラウド型Jupyterノートブック環境です。Googleのクラウド上でホストされており、Pythonスクリプトをクラウド環境で実行・テストしたい開発者のためにGoogleが提供・運用しています。本記事では、Google Colaboratoryの環境を立ち上げてから、実際にPythonコードを記述・実行するまでの一連の手順を、初心者の方にもわかりやすく解説します。1. Pythonノートブックを開くまず、Google Colabの公式サイト(https://colab.res