2403122 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

傀儡師の館.Python

PR

日記/記事の投稿

カレンダー

キーワードサーチ

▼キーワード検索

カテゴリ

バックナンバー

2019年08月
2019年07月
2019年06月
2019年05月
2019年04月
2019年03月
2019年02月
2019年01月
2018年12月
2018年11月

フリーページ

プロフィール


kugutsushi

サイド自由欄

設定されていません。
2008年01月12日
XML
カテゴリ:Python
Python のソースコードを Windows の EXE 形式の実行ファイルにコンパイルするツールとして py2exe がある。たぶん、一番よく使われるのがこれ。でも、setup ファイルを書かなくてはならないのが面倒。cx_freeze の方が、その点楽で setup ファイルを書く必要がない。FreezePython hoge.py で hoge.exe を作ってくれる。楽なのが一番。Linux でも、実行ファイルを作ることができるというところもいい。

ただし、sitecustomize.py とか読んでないので sys.getdefaultencoding() が ascii になる。UTF-8 にしたい。さもないと LookupError: unknown encoding: utf-8 とかいうことになる(私はソースファイルを UTF-8 で書いているので)。

そこで initscripts\Console の中に次の行を入れておく。こうしておくと、sys.getdefaultencoding() が UTF-8 になり、エンコーディングのエラーもでなくなる。

from encodings import utf_8
from encodings import cp932

import sys
if hasattr(sys,"setdefaultencoding"):
sys.setdefaultencoding("utf-8")

この手の実行形式のファイルを作ってくれるツールとして他にも Jungle .Py Compiler がある。これもjungle hoge.py で実行ファイルを作ってくれる。ただし、環境変数 PYTHONPATH を指定してない場合、ソースと同じ場所にライブラリがないと import している部分が読み込まれない。set PYTHONPATH=C:\Python24\lib\site-packages とかしてから jungle hoge.py とするか、-p オプションをつけて jungle -p C:\python24\lib\site-packages hoge.py のようにしないとダメ。

.Py Compiler の jungle.exe 等、ソースファイルがどこで公開されているのか、あるいは公開されていないのか不明なことと、エンコーディングの問題でエラーが出るのに対して対処方法が分からないのでギブアップ。やっぱりソースコードがあるやつがいい。というか、ないとちょっと不安。PYTHONPATHの指定だけでは、コンパイルできても実行時に import できずにエラーになるものもある。Gnuplot.py を使ったものがだめだった。

cx_freeze に比べると 実行ファイルが若干小さいの、実行速度もちょっと速いようなので、そこはいいところ。System Call の呼び出し回数が少ないので (61716 vs 56467)、そのあたりが効いてきているのかな。

cx_freeze で作ったもの
Version Number: Windows NT 5.1 (Build 2600)
Exit Time: 4:18 pm, Saturday, January 12 2008
Elapsed Time: 0:00:00.390
Process Time: 0:00:00.250
System Calls: 61716
Context Switches: 6470
Page Faults: 6948
Bytes Read: 8084451
Bytes Written: 45268
Bytes Other: 372109

jungle で作ったもの
Version Number: Windows NT 5.1 (Build 2600)
Exit Time: 4:18 pm, Saturday, January 12 2008
Elapsed Time: 0:00:00.375
Process Time: 0:00:00.218
System Calls: 56467
Context Switches: 6651
Page Faults: 5962
Bytes Read: 7526699
Bytes Written: 45232
Bytes Other: 462425

でも、使い勝手とソースコードがあることの安心感とか、最低限のドキュメントがあるとか、使い方が一番簡単、ということで全般的なバランスから cx_freeze がいいかな。


アクセス解析







最終更新日  2008年01月13日 00時06分37秒
コメント(2) | コメントを書く
[Python] カテゴリの最新記事

Copyright (c) 1997-2019 Rakuten, Inc. All Rights Reserved.