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