スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CygwinからPython for Windowsとpy2exeを使う

私は不得手なことは一切やらず、得意なことだけやるようにしている。
本田宗一郎

Windowsでpythonという場合、cygwin pythonかWindows python(Python for Windows)の選択肢があります。自分の場合、shell作業との相性からcygwin版のpythonを使っていますが、目的によってはWindows pythonを使いたい時もあります。ということで、WIndows pythonとcygwinの組み合わせ時の注意点などをメモっておきます。

Cygwin terminalからWindows Pythonを使うための設定

alias設定

Windows Pythonの標準インストールであれば、python本体はC:\Python27\python.exeがインストールされると思います(Python2.7の場合)。基本は、cygwin版pythonを使うので、ここにはパスを通さず.bashrcあたりにaliasだけ用意しておきます。
alias winpython='c/Windows/Python27/python.exe'

interactiveモードとprint問題

cygwin terminal (Mintty等)からWindows Pythonを使った時にまずハマるのが、出力問題DOSプロンプト以外からの起動だと、Windows Pythonはinteractiveモードとして認識してくれないのが原因のようです。

対策としては以下の方法があります。
  • interactive modeのoption(-i)付きで起動する。
    $ winpython -i
    
    [欠点] interactive実行の時はいいのですが、script指定で実行した後、プロンプトが残ってしまう

  • バッファリングを無効にする。
    (-uオプションをつけるか, 環境変数PYTHONUNBUFFEREDを設定する)
    $ export PYTHONUNBUFFERED=1
    $ winpython hoge.py
    
    または、
    $ winpython -u hogepy
    
    [欠点] interactiveモードには使えない

  • DOSプロンプト経由で実行する (cygstartを使う)
    $ cygstart /cygdrive/c/Windows/Python27/python.exe hoge.py
    
    [欠点] 実行すると終了するので、print内容確認したい時とかには向かない
全ての用途を満たすような解はなさそうなので、目的に応じてこのあたりを使い分けるのが良いかと思います。

(参考)

改行コードの違い

Windows Pythonとcygwin pythonを切り替えて使う際に、ひとつ注意点として改行コードの扱いの違いがあります。 Cygwin版がCR+LFとなるのに対して、Windows PythonはCRです。
print文等で自動付与される改行に加えて、明示的に'\n'で書いたものも違います。

・cygwin版の出力 (出力内容をodコマンドで確認)
$ python -c "print 'abc'" | od -c
00000000   a   b   c   \n
$ python -c "print 'abc\n'" | od -c
00000000   a   b   c   \n  \n

・Windows Pythonの出力 (出力内容をodコマンドで確認)
$ winpython -c "print 'abc'" | od -c
00000000   a   b   c   \r  \n
$ winpython -c "print 'abc\n'" | od -c
00000000   a   b   c   \r  \n  \r  \n

fileへwriteした時の改行の扱いも同じように違うので注意が必要です。

py2exeを使う

Cygwin pythonがあるのに、あえてWindows pythonを使う目的の一つ(個人的にはこれだけ)が、py2exeです。python scriptをexe形式に変換してくれる便利なしろものです。自分専用のscriptであれば、わざわざexe化する意味はないのですが、Windows用で、かつ、配布用のプログラムとなると、python環境不要なexeの方が何かと便利です。

上で書いたようなかたちで共存できているなら、py2exe使う時だけ、Windows Python呼び出すだけです。とはいえ、せっかくcygwin環境から使うので、Makefileも用意してあげましょう。

Makefile
PYTHON = /cygdrive/c/Python27/python.exe

TARGET = test.exe
SRC    = test.py
SETUP  = setup.py

dist/$(TARGET) : $(SRC) $(SETUP)
	$(PYTHON) $(SETUP) py2exe

clean:
	rm -rf dist build

setup.py
# -*- coding: utf-8 -*- 

from distutils.core import setup
import py2exe

option = {
    "compressed"    :    1    ,
    "optimize"      :    2    ,
    "bundle_files"  :    1
}

setup(
    options = {
        "py2exe"    :    option
    },
    console = [
        {"script"   :    "test.py"}
    ],

    zipfile = None
)

これらを対象のpyファイル(上の例ならtest.py)と同じディレクトリに置いてやればOKです。
py2exeの使い方やインストール等は以下あたりが参考になります。

ファイルが増えてくるとMakefile用意しておくとやっぱり便利です。

B009Z30HPG

【関連記事】
gnupackでCygwin導入した時に最初にすること
WindowsでCUI環境


【関連書籍】
GNU Make 第3版 Robert Mecklenburg 矢吹 道郎 (監訳)
エキスパートPythonプログラミング Tarek Ziade 稲田 直哉
初めてのPython 第3版 Mark Lutz 夏目 大
Dive Into Python 3 日本語版 Mark Pilgrim Fujimoto
Python クックブック 第2版 Alex Martelli Anna Martelli Ravenscroft David Ascher 鴨澤 眞夫

スポンサーサイト
人気エントリ
最近の記事
本のおすすめ

4274065979

4844337858

482228493X

4904807057

4873114799


最近のコメント
Links
プロフィール
  • Author:proger
  • 組み込み関係で仕事してます
ブログ内検索
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。