zipappモジュール徹底解説 – 実行可能なPython zipアーカイブの作成と管理
zipappモジュールとは
zipappモジュールは、Python 3.5以降の標準ライブラリに組み込まれているモジュールです。Pythonコードを含むzipファイル(実行可能なzipアーカイブ)の作成と管理を行うために使用され、作成されたアーカイブはPythonインタープリタから直接実行できます。zipappモジュールには、コマンドラインインターフェース(CLI)とプログラミング用インターフェースの両方が用意されています。
コマンドラインから実行可能アーカイブを作成する
実行可能なアーカイブを作成するには、エントリポイントとなるmain()関数を持つモジュールが必要です。以下のコマンドで実行可能アーカイブをビルドできます。
python -m zipapp myapp -m "example:main"
このコマンドを実行する際は、カレントディレクトリに「myapp」というフォルダが存在し、その中にmain()関数を含む「example.py」が保存されている必要があります。
まず「myapp」フォルダを作成し、次のコードを「example.py」として保存しましょう。
def main():
print ('Hello World')
if __name__=='__main__':
main()上記のコマンドをターミナルから実行すると、「myapp.pyz」というファイルが生成されます。このファイルは、そのままコマンドプロンプトから実行できます。
C:\python37>python myapp.pyz Hello World
主なコマンドラインオプション
zipappコマンドでは、以下のオプションがサポートされています。
-o <output>, --output=<output>
出力ファイル名を指定します。デフォルトでは、出力ファイル名は入力ソースと同じ名前に「.pyz」拡張子が付いたものになります。-oオプションを指定することで、任意の名前に変更可能です。
-p <interpreter>, --python=<interpreter>
実行時に使用するインタープリタを明示的に指定します。
-c, --compress
deflate方式でファイルを圧縮し、出力ファイルのサイズを削減します。
プログラムからzipappを利用する
zipappモジュールは、Pythonスクリプト内からも利用できます。主な関数は以下の通りです。
zipapp.create_archive(source)
指定したソースフォルダからアプリケーションアーカイブを作成します。必要に応じて、interpreter(インタープリタ)、target(出力先)、compressed(圧縮の有無)といった引数も指定できます。
zipapp.get_interpreter(archive)
アーカイブの先頭にある#!行に指定されたインタープリタを返します。
以下は、Pythonコードからアーカイブを作成する例です。
>>> import zipapp
>>> zipapp.create_archive('myapp', 'myapp.pyz')
-
PythonでディレクトリをZIPアーカイブに圧縮する方法
Pythonでディレクトリ全体をZIPアーカイブとしてまとめるには、標準ライブラリのzipfileモジュールを使用します。os.walk()を使ってディレクトリツリーを再帰的に走査し、その中にあるすべてのファイルをアーカイブに追加していきます。 基本的な実装例 import os import zipfile def zipdir(path, ziph): # ziph は zipfile のハンドル(ファイルオブジェクト) for root, dirs, files in os.walk(path): for file in files:
-
複数のPythonモジュールを1つにバンドルする方法
はじめにPythonで開発を行っていると、複数のモジュールやスクリプトを1つのファイルにまとめて配布したい場面があります。この記事では、複数のPythonモジュールをバンドルする代表的な2つの方法を紹介します。方法1:zipファイルとして実行するPython 2.6以降を使用している場合、スクリプト群をzipファイルにパッケージ化し、そのまま直接実行することができます。手順は以下の通りです。必要なファイルをすべて my_app.zip という名前のzipファイルにまとめるメインとなるエントリーポイントのスクリプトを __main__.py というファイル名で配置するこれにより、以下のようにpy