2008-04-24
■ [py2exe][windows] COMオブジェクトの定数を使用したスクリプトを py2exe で固める。

pywin の win32com.client を使用する際に
定数は win32com.client.constants.*** などという形で記述すれば使用できる。
Excelだったら
import win32com.client
として、
range.End( win32com.client.constants.xlDown ).Row
などと使用すれば良い*1。
これで、*.py の拡張子で実行するスクリプトの場合は問題ないのだが、
そのまま py2exe で固めて実行したところ、
AttributeError: xlToRight
と言われてしまった。
そこで色々と検索してみたところ全く同じケースについてこちら(py2exe Wiki)にあったので試してみた。
結果としてはリンク先の Solution 1 の解決方法(setup.pyの記述で対応)する方法は上手く行かなかった*2。
そこで、暫定的にだが Solution 2 の解決方法で対応している。
1. コマンドラインで以下を実行
> python makepy.py -o (出力ファイルのパス)
2. ウィンドウが開いて対応するCOM オブジェクトライブラリについて聞かれるので、使用したいものを選択
3. ファイルが出力されるので、それを使用したい自分のスクリプトから読めるように適当なパスに配置
4. 使用するスクリプトファイルで作成したファイルを import し、使用する*3。
これで解決できたわけだが、出来れば py2exe の setup.py で対応したいなぁ。
2008-01-25
■ [windows][cygwin] Windows版とcygwin版の共存でハマる

下のpy2exeでの話しだが、
py2exe モジュールを導入後にコマンドプロンプト上でスクリプトを実行した時に
import py2exe
でエラーになってしまいハマった。
IDLEなどでは import に問題が無いのだが、
コマンドプロンプト上からスクリプトを実行した時のみ
「import py2exe」が上手く動作しなかった。
で、色々と調べて分かったのだが、
環境変数 PATH に cygwin の /usr/bin のパスをしていていたことと
環境変数 PYTHONPATH を設定していなかったことが原因だった*1。
その設定がされていることによってコマンドプロンプト上での
python の呼び出し優先度が「 cygwin > python for windows 」となり、
いくらやっても py2exe を import 出来なかった模様。
さっそく環境変数を設定した。
これで、Windows版とcygwin版のPythonが問題なく(期待通りに?)動くようになった。
■ [py2exe][windows] スクリプトをexeファイル化する

スクリプトをexeファイル化する、 py2exe モジュールというものがある。
- py2exe
- http://www.py2exe.org/
今回は以下のファイルをexeファイル(コンソール版)化するものとする。
hello.py
# -*- coding: utf-8 -*- print "hello world!"
導入
py2exe のインストーラをダウンロードして、インストーラを実行するだけで良い。
動作の確認。
$ python -c "import py2exe"
上のコマンドを実行してメッセージが何も出なければOK。
一番基本的な書き方
hello.py と同じディレクトリに setup.py を作成する。
:setup.py:
from distutils.core import setup import py2exe setup( console=[ "hello.py" ] )
次にコンソールから上記 hello.py が置かれているディレクトリに移動し、
以下のコマンドを入力
> python setup.py py2exe
正常に動作していれば、上記ディレクトリ内に build と dist という
2つのディレクトリが出来る。
ディレクトリ dist にexeファイルが出来ているので、
それを実行してみれば良い。
> hello.exe
もう少し高度な設定
今度はもう少し高度な設定をする。
from distutils.core import setup import py2exe setup( options={ "py2exe" : { "compress" : 1, "optimize" : 2, "bundle_files" : 2 } }, console=[ "hello.py" ] )
options内のpy2exe設定について
キーワード | 解説 | 値 |
---|---|---|
compress | 添付ファイルの圧縮設定 | 0 = off, 1 = on |
optimize | 最適化レベル設定 | 0 = 無圧縮, 1 = 低レベル最適化, 2, = 高レベル最適化 |
bundle_files | 添付ファイル数の設定 | 1 = 最小, 2 = 中程度, 3 = 最大 |
*1:2要素のどちらが根本原因かは調べてない