全体表示

[ リスト ]

python3.1でtkinterを使ったGUIアプリケーションを
cx_freezeでwindows用の実行形式ファイルにしたときのメモです。

ちょっと引っかかって色々調べたので、残しておこうと思いました。

もともとpy2exeを使っていましたが、python3系に対応していない
ようなので、cx_freezeを使ってみました・・


(1)pythonのプログラム
ここではtkdocsのサンプルをそのまま使いました。
下記ページの「Country Selector Listbox Example」ってやつです。。
http://www.tkdocs.com/tutorial/morewidgets.html
ここに書かれてるコードを、listsample.pyという名前で保存しました。

(2)cx_freezeのインストール
ここから、windowsのpython3.1用をダウンロードしてインストールします。
http://cx-freeze.sourceforge.net/


(3)setup.pyの作成と実行形式ファイルの作成
cx_freezeを実行するに当たり、setup.pyを作成します。
ホームページに載ってるまま使うとまともに動きません・・
ポイントは、optionの「include-files」にtk/tclのパスを含めることです。
環境によって違うかもしれませんが、こんな感じです↓
from cx_Freeze import setup, Executable

includes = []
includeFiles = [(r"c:\Python31\tcl\tcl8.5", "tcl"), (r"c:\Python31\tcl\tk8.5", "tk")]
excludes = []

setup(name = "listsample",
      version = "0.1",
      description = "sample",
      options = {"build_exe": {"include_files":includeFiles, "includes":includes, "excludes":excludes}},
      executables = [Executable("listsample.py", base='Win32GUI' )]
)
※個別に含めたいモジュールと除外したモジュールがあるなら、それぞれincludesとexcludesに指定が必要です。

この後、
c:\python31\python setup.py build
を実行すれば、カレントフォルダの配下に"build\exe.win32-3.1\listsample.exe"が出来ているはずです!
これをダブルクリックするとアプリが起動するはずです。

ただ、一応起動はできますが、ファイルがたくさんあってゴチャゴチャしてる・・
そこで、NSISを使うとひとつにまとめられます!


(4)NSISでファイルをまとめる
まずここからNSISをダウンロードしてインストールします。
http://nsis.sourceforge.net/Main_Page

あと、実行ファイルにアイコンを付けたいなら、icoファイルも用意します。
ここでは、フリーで落ちてた「hp-application.ico」を作業中のフォルダに起きました。

そしたら、NSISの設定ファイルsetup.nsiを作成します。
ここでは、↓にあったのを少し変更して使いました・・
http://www.py2exe.org/index.cgi/SingleFileExecutable
!define cxfreezeOutputDir 'build\exe.win32-3.1'
!define exe             'listsample.exe'
!define icon            'hp-application.ico'
!define compressor      'lzma'  ;one of 'zlib', 'bzip2', 'lzma'
!define onlyOneInstance
RequestExecutionLevel user

; - - - - do not edit below this line, normaly - - - -
!ifdef compressor
    SetCompressor ${compressor}
!else
    SetCompress Off
!endif
Name ${exe}
OutFile ${exe}
SilentInstall silent
!ifdef icon
    Icon ${icon}
!endif

; - - - - Allow only one installer instance - - - - 
!ifdef onlyOneInstance
Function .onInit
 System::Call "kernel32::CreateMutexA(i 0, i 0, t '$(^Name)') i .r0 ?e"
 Pop $0
 StrCmp $0 0 launch
  Abort
 launch:
FunctionEnd
!endif
; - - - - Allow only one installer instance - - - - 

Section
    InitPluginsDir
    SetOutPath '$PLUGINSDIR'
    File /r '${cxfreezeOutputDir}\*.*'
    SetOutPath '$EXEDIR'        ; uncomment this line to start the exe in the PLUGINSDIR
    nsExec::Exec $PLUGINSDIR\${exe}
SectionEnd

最後に、以下のコマンドでカレントフォルダに「listsample.exe」がアイコン付きで生成されるはずです!!
"C:\Program Files\NSIS\makensisw.exe" setup.nsi
※NSISを「C:\Program Files\NSIS\makensisw.exe」にインストールしたと仮定・・

この記事に

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

.


みんなの更新記事