Hatena::Grouppython

nelnal@python

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