ゲ製メモ

ゲ製のメモを色々。




 構想中のボードゲーム的カードゲーム的なやつ。
 取り敢えず手っ取り早い方法を思いついたのでメモとして残しておく。
 ふと思いついたシンプルなボードゲーム?的なもの。


  '14 10.16  Tkinter  合計時間:**:**

PythonのGUIモジュールの内、ポピュラーなwxPythonとTkinterからデフォ付属の方を使ってみた: 一旦〆。
簡単なマウス操作を受け付けるコンソール風システム。受け取った内容の扱いとかはまだ適当だけど、
試したいことは試せた&気力が切れたの2理由で細かいところは練り込まずここまで。
……こういう形の〆を繰り返しているからエターならーなのだ。

しかしこれほんと日本語資料の割と少ない分野だ。ShidoさんとHiroiさんのところぐらいでしか体系的に纏まっていない気がする。
(URL: https://www.shido.info/py/tkinter1.html   http://www.geocities.jp/m_hiroi/light/pytk01.html
そう考えると知り得た範囲を日本語で出力すると、割と大したことないことながらも一応一つの資料にはなるかもしれない……
……けど、気力が湧かないので気が向いたらまたの機会に。
(※ 纏めるにしても、体型だった内容は↑の2箇所があるので、そこで記述がなく色々調べた箇所の補完的なものになります。)

ちなみに:どうでも良い結論として、結局何かしらGUIを使ってみる場合、CでのWinAPIは労力が大き過ぎ論外で、
PythonでのTkinterもそれよりは遙かに楽ではあるものの結局ウディタでできることはウディタでおkという結論に。

結論自体は前々から理解してたけど、やっぱり実際に謎の苦労を体験してみると身にしみて実感。
py2exeで固めるにしてもそもそもTkinterを纏めようとすると10MBぐらいTcl/Tkに取られて、
メイン部分含めると簡単に20MB弱行くからexe化して投げる場合容量的にもあんまり美味しくない。
(この部分に関してはWinAPIを叩くのが強そうだけど、面倒極まるのでAUTO。ままならない。)



  '14 10.04  Python 3.x で py2exe 2  合計時間:**:**

前回何故か気付かなかった、日本語を含むデータのexe変換が上手くいかない処理の対処。
具体的には、以下のようなエラーが出て失敗する問題。

> py -3.4 -m py2exe.build_exe Python_Script.py

  3 missing Modules
  ------------------
? readline                            imported from cmd, code, pdb
? win32api                            imported from platform
? win32con                            imported from platform
Building 'dist\Python_Script.exe'.
Traceback (most recent call last):
  File "C:\Python34\lib\runpy.py", line 170, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Python34\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Python34\lib\site-packages\py2exe\build_exe.py", line 145, in <module>
    main()
  File "C:\Python34\lib\site-packages\py2exe\build_exe.py", line 142, in main
    builder.build()
  File "C:\Python34\lib\site-packages\py2exe\runtime.py", line 223, in build
    self.build_exe(target, exe_path, options.libname)
  File "C:\Python34\lib\site-packages\py2exe\runtime.py", line 302, in build_exe
    script_data = self._create_script_data(target)
  File "C:\Python34\lib\site-packages\py2exe\runtime.py", line 581, in _create_script_data
    compile(script_file.read() + "\n",
UnicodeDecodeError: 'cp932' codec can't decode byte 0x88 in position 118: illegal multibyte sequence

エラー内容を見る限り(そして『Hello, Wolrd』は問題なく動いて『ハローワールド!』だとエラーが出る辺り)、
明らかに日本語の処理が上手くいっていないという感じ。Python 3.xはUnicodeDecodeErrorが減ったというけど、
Python 3.xから入った身としては感覚的には普通にエンコーディング周りでやたらエラー出る印象。酷い。

取り敢えず日本語入れたソースを放り込むと毎度これで失敗するようなので、もう大元を叩く方向で対処。
エラーの出ている箇所、つまりは↓の内容を書き換えてpy2exe自体のバグ(?仕様?)を修正する方針で。

  File "C:\Python34\lib\site-packages\py2exe\runtime.py", line 581, in _create_script_data
    compile(script_file.read() + "\n",

"\n"が悪さしてるわけではないようなので、となると問題はscript_file.read()
ちょっと切り出して別枠で同じことしてみたら案の定これが問題だったので、
read関数のエラー原因捜索として周辺を見てみると少し前の箇所である577行目にopen関数が存在。

           with open(target.script, "U") as script_file:

target.scriptなるものが何かは分からないけど、名前からexe化しようとしているスクリプトのファイル名っぽい。

openのencoding指定を省略した場合、 Python 3.xの組み込み関数のドキュメントのopen関数についての項目 を見る限り
使用される文字コードは環境依存らしいので、たぶんここでcp932が指定されscript_file.read()をcp932でやってそう。
恐らく一般的に/少なくとも自分はスクリプトをutf-8で記述しているので、これは確実にUnicodeDecodeError。

……ので、encoding="utf8"をこのopen関数に追加すればこの問題は解決するはず。 → 解決。

           with open(target.script, encoding="utf8") as script_file:

mode指定の"U"を消したのに特に意味はないです。
行分割に関する指定を行うmode指定らしいから、一括読込してるここでは特に意味がない……?

※ おまけ:何故かctypesモジュールが無いエラー吐き出したので、
そっちはpy2exe起動する際に-i ctypesしてさっくり解決。なんだったんだ一体……



  '14 09.16  Python 3.x で py2exe  合計時間:**:**

Python 3.4始めました。

取り敢えず試した範囲として、web上に(軽く見た限りでは)現時点ではメモが存在しないexe化について。
Pythonを始めるに際して正規表現に続きGUIと並行して手を出したexe生成、検索して出てくるメモが軒並み
「Python3.x系列にはpy2exeは非対応だからCX_Freezeを使った。py2exe程じゃないけど良いねこれ。」
みたいな内容ばかりで、Python3.xだと使えないものだと完全に信じてた。
……けど、改めて調べてみたらどうもpy2exeはつい数ヶ月前から使えるようになっていたらしいので実験。
py2exeの公式 を参考に、
py -3.4 -m pip install py2exe
……とコマンドラインから入力して最新版を入手。
web上のsetup.pyの書式情報を色々と読みつつ試してみたところ、無事exe生成。
吐き出されるexeはやたら重いものの、dll付属せず単体での動作もできて一満足。
しかし、exe生成テスト用の2、3行のスクリプトで8MBはやっぱ凄い。重い。

インデント式の記法がスタイリッシュなのと、あとは半ば気分転換程度の気持ちでなんとなく初めてみたPython、
文字列処理に強い言語としてexeが組めると手持ちの雑多な小処理を表に投げられるかもしれないからこれは素敵。
PerlだとPARは最新版に非対応だし、perl2exeは無料期間はあるもののシェアウェアだしで、
言語自体は便利でもどうにもexeが作りにくい環境だった……


.
最終更新:2013年10月20日 03:50