py2exeでフローズンバイナリを作成する

昨日のTimeFlies2.pyを配布できる形に変換したい。
そこで、py2exeを使ってPythonプログラムのフローズンバイナリを作ってみる。
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