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

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')
  1. 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:

  2. 複数のPythonモジュールを1つにバンドルする方法

    はじめにPythonで開発を行っていると、複数のモジュールやスクリプトを1つのファイルにまとめて配布したい場面があります。この記事では、複数のPythonモジュールをバンドルする代表的な2つの方法を紹介します。方法1:zipファイルとして実行するPython 2.6以降を使用している場合、スクリプト群をzipファイルにパッケージ化し、そのまま直接実行することができます。手順は以下の通りです。必要なファイルをすべて my_app.zip という名前のzipファイルにまとめるメインとなるエントリーポイントのスクリプトを __main__.py というファイル名で配置するこれにより、以下のようにpy