Pythonでプログラムを作るときのTips

あいさつ

つかさです。
プログラム本体とは関係ないが、詰まったりしたことのメモ

py2exeの使い方

実行ファイル形式にするので定番が、py2exeらしい。
ここからダウンロード。Pythonのバージョンによって、違うのをインストールしないとだめのようだ。僕は2.7を使ってるのでpy2exe-0.6.9.win32-py2.7.exeをダウンロードした。

そしてこれをインストール。

では、これで実行ファイルを作る方法。

setup.pyを作ります。

setup.py
import sys
import os

from distutils.core import setup
import py2exe

py2exe_options = {
  "compressed": 1,
  "optimize": 2,
  "bundle_files": 3}

setup(
  options = {"py2exe": py2exe_options},
  windows = [{
            "script" : "SETZER.py", "icon_resources": [(1,"py.ico")],

            "name" : "SETZER",
            "version" : "0.01",
            "description" : "",
            "company_name" : "hoehoeSoft",
            "url" : "http://d.hatena.ne.jp/tukasa1919/",
            
            }],
  zipfile = "lib/library.zip")

そしてこれを、実行ファイルがあるフォルダに入れ、PPxであれば次のようなコマンドを打つ。

CD %1 %: C:\Python27\python.exe setup.py py2exe
ポイント

ポイントは二カ所。bundle_filesと、zipfileです。

bundle_filesで、実行ファイルの大きさを変えることができます。3になると小さくなります。
ただ、これだとディレクトリに、関連するファイルがたくさんできてうっとうしい。そこで、サブフォルダにそれらをまとめて入れたいと思うことになると思います。

そのときに設定するのが、zipfileです。ここで

zipfile = "lib/library.zip"

とすることで、libフォルダを作りそのなかに.pydとか.dllとかの雑多なファイルをまとめられるようにできます。

sitecustomize.py

エンコードの設定のため、デフォルトのエンコーディングを変えたほうがいいらしいので、変える。

  • sitecustomize.py
import sys

sys.setdefaultencoding("mbcs")

このファイルを

C:\Python27\Lib\site-packages

に入れます。

UNICODEへの変換方法

Pythonをいじっていて一番躓いたのが、エンコードのエラー。何かにつけて

UNICODE DECODE ERROR

みたいな文字が出てしまう。
とりあえず、外部から何か文字列を取り出し、内部で作業したいなら、UNICODEに変換するというのが無難らしい。
そして、再び外部に出力するときには、Shift-jisなりUTF-8なりにする、と。

というわけで、UNICODEに変換する方法です。

                lookup = ('utf_8', 'euc_jp', 'euc_jis_2004', 'euc_jisx0213',
            'shift_jis', 'shift_jis_2004','shift_jisx0213',
            'iso2022jp', 'iso2022_jp_1', 'iso2022_jp_2', 'iso2022_jp_3',
            'iso2022_jp_ext','latin_1', 'ascii')
                for encoding in lookup:
                    try:
                        hoge = hoge.decode(encoding)
                        break
                    except:
                        pass

ファイルから読み取るなりGUIから入力された文字を読み取るなりする場合には、とりあえずこれを挟んでUNICODEにデコードするといいみたいです。

で、出力するときにはエンコードをする。

.encode("UTF-8")

だとか

.encode("Shift-jis")

をくっつければいいみたいです。技術志向 | Python 文字コードの判定と変換を参考にしました。

作業フォルダを実行ファイルのあるフォルダに

ファイルのはじめの方に、以下を追加すると、作業フォルダを実行ファイルのある場所に固定できる。もちろんosはインポートしておきましょう。

os.chdir(os.path.dirname(sys.argv[0]) or '.')

アイコンの作成

EDGEを使う。僕は横幅32縦幅32で作った。

Editor

LREditXyzzy+py-modeというのが選択肢としてあるみたいだ。
僕はずっとLREditを使ってた。

Ctrl + E Ctrl + Oで、アウトラインが出るのが便利。