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-01-25

[][] Windows版とcygwin版の共存でハマる 13:31  Windows版とcygwin版の共存でハマる - nelnal@python を含むブックマーク はてなブックマーク -  Windows版とcygwin版の共存でハマる - nelnal@python

下のpy2exeでの話しだが、

py2exe モジュールを導入後にコマンドプロンプト上でスクリプトを実行した時に

import py2exe

でエラーになってしまいハマった。


IDLEなどでは import に問題が無いのだが、

コマンドプロンプト上からスクリプトを実行した時のみ

「import py2exe」が上手く動作しなかった。


で、色々と調べて分かったのだが、

環境変数 PATH に cygwin の /usr/bin のパスをしていていたことと

環境変数 PYTHONPATH を設定していなかったことが原因だった*1

その設定がされていることによってコマンドプロンプト上での

python の呼び出し優先度が「 cygwinpython for windows 」となり、

いくらやっても py2exe を import 出来なかった模様。


さっそく環境変数を設定した。

PATH
既存要素の先頭にWindowsPythonインストールパスを設定
PYTHONPATH
(WindowsPythonインストールパス)\Lib\site-packages

これで、Windows版とcygwin版のPythonが問題なく(期待通りに?)動くようになった。


[][] スクリプトを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 = 最大

*1:2要素のどちらが根本原因かは調べてない

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