Daily Archives: 12/27/2013

PythonでWindowsアプリケーションを作ってみよう

Pocket

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

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の制限(日本語パスはダメ)

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

PyInstallerのインストール

pyinstallerのインストールを参照。
ダウンロードして展開するだけ。
インストールっぽいことは不要。
追加でUPXがあれば準備するとよい。後述。

http://www.pyinstaller.org/ からダウンロード。
2013/12/6現在、最新版は2.1。

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+右クリックで開く。
pyicmdprmpt

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

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

C:\download\python\PyInstaller-2.1>

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

pyipthcp

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のフォルダに、スクリプト名でフォルダが出来ているはず。
pyiblddn

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

pyidist

その他のオプション説明

以下参照。
http://pythonhosted.org/PyInstaller/

以下にピックアップ。

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

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

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

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

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