py2exeでフローズンバイナリを作成する
昨日のTimeFlies2.pyを配布できる形に変換したい。
そこで、py2exeを使ってPythonプログラムのフローズンバイナリを作ってみる。
py2exeの使い方は、いろいろな人が解説してくれている。
- http://python.matrix.jp/modules/py2exe.html
- http://ymasuda.jp/python/py2exe/py2exe.html
- http://www.python.jp/Zope/articles/tips/py2exe
これらを参考にして、以下のsetup.pyを作成する。アプリを実行するときにコンソールは開きたくないので、今回は"windows="を引数に指定する。
from distutils.core import setup import py2exe py2exe_options = { "compressed": 1, "optimize": 2, "bundle_files": 2} setup( options = {"py2exe": py2exe_options}, # console = ["TimeFlies2.py"]) windows = ["TimeFlies2.py"])
これを使って、コマンドプロンプトで
> python setup.py py2exe
とする。
問題なくディレクトリdistが作成される。このディレクトリごと配布すればOK。
今回はpy2exeでWindowsアプリを作成したが、最終的に作るものはLinuxで動作するようにする予定だ。なので、Linux用に変換できるプログラムもおいおい試してみたい。それを実現するには、pyInstallerかfreezeを使えばできるらしい。
シェルソート
挿入ソートのコードを改良してシェルソートのコードを作成した。
正しく動作することは確認したが、自分にとっては実装するには複雑すぎてコードを見ただけでは正しいかどうか判断が難しい。アルゴリズムとしては明快なのであるが...。try and errorでようやく正しい答えを得ることができた。
""" Shell sort Aug. 09, 2007 """ data = [2,15,23,40,56,1,12,54,27,6,3,5,67,87,22,38,92] print data dsep = len(data)/2 while 1: for N in range(1, dsep): for i in range(N, len(data), N): tmp = data[i] j = i while tmp < data[j-N] and j>=N: data[j] = data[j-N] j -= N data[j] = tmp if dsep == 0: break dsep /=2 print data