Hatena::Grouppython

nelnal@python

2008-04-24

[][] COMオブジェクトの定数を使用したスクリプトを py2exe で固める。 17:06  COMオブジェクトの定数を使用したスクリプトを py2exe で固める。 - nelnal@python を含むブックマーク はてなブックマーク -  COMオブジェクトの定数を使用したスクリプトを py2exe で固める。 - nelnal@python

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 で対応したいなぁ。

*1:ここではかなり省略しているが、range = Worksheet( 1 ).Range("A1") 等と考えてもらえれば良い

*2:色々と粘ってみたのだが

*3:constants = (出力ファイル).constantsなどとするとより使用しやすい

トラックバック - http://python.g.hatena.ne.jp/nelnal_programing/20080424

2008-02-14

[][] py2exe で固めたファイルで UnicodeDecodeError その2 13:09  py2exe で固めたファイルで UnicodeDecodeError その2 - nelnal@python を含むブックマーク はてなブックマーク -  py2exe で固めたファイルで UnicodeDecodeError その2 - nelnal@python

前回 py2exe でEXEファイルを作成中に UnicodeDecodeError になったが、

今回は実行中に同エラーが発生。


ひとまずバックトレースで追ってみる。

エラーメッセージに「ASCII code (ほにゃほにゃ((忘れたw)))」と出てたので

該当行の文字列を unicode 型に指定した。

ついでに周辺の文字列も unicode 型に変更。

変更したソースを py2exe で固めて実行すると問題なく動く様になった。


py2exe ってどうも文字コードの判定が厳しいよなぁ。

pythonスクリプトそのものの型判定がゆるいので

どうしてもEXEファイル化した段階で問題が発生してしまう。

トラックバック - http://python.g.hatena.ne.jp/nelnal_programing/20080214

2008-01-30

[] dist にファイルを置く場合 15:26  dist にファイルを置く場合 - nelnal@python を含むブックマーク はてなブックマーク -  dist にファイルを置く場合 - nelnal@python

PyJUG の py2exe 文書に dist 直下にファイルをコピーする方法が書かれていなかったのでメモ。

まぁ、そんだけなんだけどね・・・って話なんですが。

PyJUG py2exe の文書
http://www.python.jp/Zope/articles/tips/py2exe

dist 直下にファイルをコピーする場合にはフォルダ名文字列*1を空文字列に設定すれば良い。

本当にそれだけ。

setup(

...

data_files=[ ( "", "setup.inf" ) ],

...

)


[] UnicodeDecodeError発生 15:26  UnicodeDecodeError発生 - nelnal@python を含むブックマーク はてなブックマーク -  UnicodeDecodeError発生 - nelnal@python

py2exe を編集して実行したところ UnicodeDecodeError が発生。


Traceback が出ているので見てみたのだが

(Pythonパス)\Lib\site-packages\py2exe\build_exe.py

というわけの分からんところでエラーになってる。

そもそもデータの処理は全て終わっているようで

「作成した run.exe をコピー(同時に名前を変更)」というところでエラーになっている。


うーん・・・と

色々 setup.exe のオプションを弄ってみたのだが効果なし。

暫くするうちに

setup.exe を実行しているパスに日本語を含んでいるのがいけないのでは!?と気付いた。

で、フォルダを移して再度 setup.exe を実行。そしたら普通に通った。


つーか、分かり辛いよ。

日本語のフォルダを含むパスで python スクリプトの開発をしていた俺も悪いけど。

*1:タプルの1つ目の要素

トラックバック - http://python.g.hatena.ne.jp/nelnal_programing/20080130

2008-01-25

[][] スクリプトをexeファイル化する 11:53  スクリプトをexeファイル化する - nelnal@python を含むブックマーク はてなブックマーク -  スクリプトをexeファイル化する - nelnal@python

スクリプトをexeファイル化する、 py2exe モジュールというものがある。

py2exe
http://www.py2exe.org/
参照
http://python.matrix.jp/modules/py2exe.html

今回は以下のファイルを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 = 最大
トラックバック - http://python.g.hatena.ne.jp/nelnal_programing/20080125