自由制作個人研さん最終日(Windows アプリケーション)

 

・今日の進歩

Pythonには、pythonスクリプトを手軽にWindowsアプリケーション化できるツールが揃っている。
有名なのはPy2exeとPyInstallerである。

 

Py2exeとPyInstallerの違い

     ↓

http://www.pyinstaller.org/
http://www.py2exe.org/

以下のサイトに載っています。

 

・インストールの容易さ
→PyInstallerが有利
・対応Pythonバージョン
→Py2exe: 2.4~3.1
→PyInstaller: 2.4~2.7
・単独exeファイル作成の容易さ
→PyInstallerがやや有利
・「manifest」ファイル埋め込みの容易さ
→Py2exeが有利

 

PyInstallerの制限(日本語パスはダメ)

PyInstallerで生成したアプリには制限がある。
そのアプリを、日本語、要するにNon-ASCII文字列の含まれるパスに置くと起動に失敗する。
Python2なせいだと思うが、じゃあPython3で作ったらどうよ?と考えるも、そもそもPyInstallerはPython3に対応してない分
運用回避する。

PyInstallerのインストール

pyinstallerのインストールを参照。

追加でUPXがあれば準備するとよい。
http://www.pyinstaller.org/ からダウンロード。

 

UPXのインストール

UPXとは、実行ファイルを、実行できる形式のまま圧縮してくれるツールである。
メリットはストレージの占有スペースを少なく出来ること。デメリットは実行時の展開処理。
UPXは実行時の展開処理がすごく速いうえにメモリ消費量も少ないとのこと。

http://upx.sourceforge.net/
http://ja.wikipedia.org/wiki/UPX

 

UPX is a portable, extendable, high-performance executable packer for several
different executable formats. It achieves an excellent compression ratio and
offers *very* fast decompression. Your executables suffer no memory overhead
or other drawbacks for most of the formats supported, because of in-place
decompression.

 

インストールはすごく簡単で
公式サイトからアーカイブをダウンロード。
Win32/i386版。
展開したらupx.exeが出てくるので、それをパスの通ったところに置くだけ。
Pythonのインストールされているディレクトリ(例: C:\Python27)の下に置くのがよいでしょう。
あるいは別ディレクトリに置いてそこにパスを通す。

 

PyInstallerの使い方

python pyinstaller.py targetscript.py とするだけである。
以下、詳細。
サンプルpythonスクリプトを一つ用意。
コマンドプロンプトを開いて展開したPyInstallerのディレクトリに移る。
cdで移るのが面倒なら、SHIFT+右クリックで開く。

f:id:tamukenkun:20181023085503p:plain

pythonにパスが通っていることを確認。

C:\download\python\PyInstaller-2.1>python -V
Python 2.7.2

C:\download\python\PyInstaller-2.1>

 

対象スクリプトをpyinstallerのディレクトリに置くか、パスを取得する。
パスの取得は、対象ファイルをSHIFT+右クリックで出来る。

f:id:tamukenkun:20181023084930p:plain

C:\download\python\PyInstaller-2.1>python pyinstaller.py "C:\download\python\reducer.py"
1215 INFO: wrote C:\download\python\PyInstaller-2.1\reducer\reducer.spec
1559 INFO: Testing for ability to set icons, version resources...
1901 INFO: ... resource update available
2413 INFO: UPX is available.
(中略)
7048 INFO: Extending PYTHONPATH with C:\download\python
7049 INFO: checking Analysis
7050 INFO: building Analysis because out00-Analysis.toc non existent
7050 INFO: running Analysis out00-Analysis.toc
7054 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable
(中略)
21276 INFO: Executing - upx --lzma -q C:\Users\xxxxxx\AppData\Roaming\pyinstall
er\bincache01_py27\_socket.pyd

C:\download\python\PyInstaller-2.1>

 

Windowsプログラムのできあがり

PyInstallerのフォルダに、スクリプト名でフォルダが出来ているはず。

 

f:id:tamukenkun:20181023084746p:plain

その下に、さらにbuildとdistという、二つのフォルダがある。
他人にプログラムを配る場合には、distフォルダの下にある方を配ること。
実行に必要なDLL(pythonのDLL, MSVCRのDLL)もセットになっているため

f:id:tamukenkun:20181023084548p:plain

その他のオプション説明

以下参照。

http://pythonhosted.org/PyInstaller/

以下にピックアップ。

-w, –windowed
実行時にコマンドプロンプトを開かないようになる。
GUIプログラムのときに便利。

-F, –onefile
プログラムを一つにまとめてくれる。
なかなか魅力的なオプションだが、プログラム実行時にけっこう時間がかかってしまう。
(試してみると分かるが、イライラするレベル)

-i <アイコンファイル>, –icon=<アイコンファイル>
プログラムのアイコンを設定できる。アイコンは拡張子.icoのファイル。

-y
–clean
-yは既存の実行ファイルを問答無用で上書きする。
修正しては何回も実行ファイルを作るときには便利。
–cleanはログファイルや作業ファイルを消してから実行ファイル作成を始める。

–noupx
UPXを使いたくないときに指定。

 

今回も引き続きWindowsアプリケーション(Python)のことについて紹介しました。

やはりこれまでPythonラズベリーパイのことをたくさんブログに記載してきましたが

僕はすべて理解をするのが少し時間がかかるので、中々覚えられなくて悩んだりもしました。でも自分なりにネットで調べたりとしながら少しずつでも理解し、次回からのチームでの開発で少しでもメンバーの役に立てるように頑張りたいと思います。