===============================
zipapp が便利そうだったので書く
===============================
:blog_date:`2015/12/07`
この記事は、 `2015 tech-yuruyuru アドベントカレンダー `__ 7 日目の記事です。
.. contents::
:local:
:depth: 1
zipapp について
===============
以下のようなディレクトリ構成とする。
::
test001/
├── __init__.py
└── __main__.py
``__init__.py`` は空のファイル、 ``__main__.py`` の中身は以下とする。
.. code-block:: python
print('hello, world')
通常、この場合以下のように実行することができる。
.. code-block:: console
$ python2.7 test001/
hello, world
さらに、このディレクトリ構成で、 ``test001`` 内を zipファイルとして
まとめると、この zipファイルを読み込み実行することができる。
まず、zipファイルは以下のように作成する。
.. code-block:: console
$ cd test001
$ zip test001.zip -r *
adding: __init__.py (stored 0%)
adding: __main__.py (stored 0%)
この状態で python インタプリタに引数として渡すと、実行される。
これでも、便利だと思う。
.. code-block:: console
$ python2.7 test001.zip
hello, world
さて、 zipapp だ。拡張子は ``.pyz`` となるが、作成しよう。
実行可能なバイナリを作成したいので、 ``-p`` オプションで ``shebang`` を指定しよう。
.. code-block:: console
$ rm test001.zip
$ cd ..
$ python3.5 -m zipapp -p '/usr/bin/env python2.7' test001/
この状態で ``.pyz`` ファイルは実行可能だ。実行してみよう。
.. code-block:: console
$ ./test001.pyz
hello, world
このように、適切に作成したモジュールを簡単に実行可能なバイナリに変換できて、
とても便利だと思います。
.. note::
`28.4. zipapp — Manage executable python zip archives — Python 3.5.1rc1 documentation `__
zipapp モジュールの説明