絖綛 N@i.jp  昨日:00038570
 今日:00053551
 総計:00793503
keywords
管理者専用
  Post   Add link   Control Panel 































新しいトピック
最新:10/01 12:07


新しいコメント
最新:07/28 16:47






管理人へMAIL

プライバシーポリシー

QuickIR を cx_Freeze で Windows の EXEファイルにしてみた(3)

いよいよ最後のステップ。QuickIRをEXE化する。


7. QuickIR をEXE化する

 さて、いよいよ本来の目的である QuickIR の EXEファイル化に取り掛かろう。

1) "QuickIR.py"

 先ずは"QuickIR.py"プログラム(Pythonスクリプト)の修正からだ。EXEファイル名を"QuickIR.exe"としたいので、__name__'quickir__main__'の場合にもmain関数が呼び出されるように修正する。

if __name__ == '__main__' or __name__ == 'quickir__main__':
    main()

 それ以外に、Version番号を1だけ上げて 1.0.8とした。

2) setupスクリプト("cxFreeze_setup.py"

 cx_Freezeのsetupスクリプトは以下のようになる。

# -*- coding: utf-8 -*-
"""
This is a cx_Freeze setup.py script

Usage:
    python cxFreeze_setup.py build
"""
import sys
import os
from cx_Freeze import setup, Executable


# Dependencies are automatically detected, but it might need fine tuning.
python_dir = r'C:¥Python35'    # Python installed directory

includes = ['irkit', 'resolve_irkit']
include_files = [python_dir + r'¥DLLs¥tcl86t.dll',
                 python_dir + r'¥DLLs¥tk86t.dll',
                 r'images¥file_add.gif',
                 r'images¥file_delete.gif',
                 r'images¥file_post.gif',
                 r'images¥file_rename.gif',
                 r'images¥folder_add.gif',
                 r'images¥folder_delete.gif',
                 r'images¥folder_rename.gif',
                 r'images¥IRKit.gif']
pakages = ['os', 'sys', 'tkinter', 'pybonjour']
excludes = ['logging', 'distutils',
            'multiprocessing', 'pydoc_data',
            'test', 'unittest',
            'xml', 'xmlrpc']
build_exe_options = {'includes': includes,
                     'include_files': include_files,
                     'packages': pakages,
                     'excludes': excludes,
                     'optimize': 2}

base = None
if sys.platform == 'win32':
    base = 'Win32GUI'

os.environ['TCL_LIBRARY'] = python_dir + r'¥tcl¥tcl8.6'
os.environ['TK_LIBRARY'] = python_dir + r'¥tcl¥tk8.6'

exe = [
    Executable('QuickIR.py', base=base, targetName='QuickIR.exe', icon='app.ico')
]


setup(name='QuickIR',
      version='1.0.8',
      description='QuickIR IRKit controller',
      options={'build_exe': build_exe_options},
      executables=exe)

 includesリストには、"QuickIR.py"が importしている QuickIRのモジュールを指定している。
更に、取り込むファイル(include_filesリスト)には、Tcl/TkのDLLだけでなく QuickIRが使用している画像ファイルも加えている。

3) EXE化バッチファイル

 QuickIRが使用している画像ファイルを取り込んでも、"QuickIR.exe"と同じ階層に置かれるだけで、このままではpy2appで Macアプリケーション化したときと同じ問題が発生する。QuickIR は imagesディレクトリ配下に画像ファイルがあると思っているので、画像ファイルが見つからなくなるという問題だ。そこで、今回も EXEファイル作成後に imagesディレクトリを作り、画像ファイルを imagesディレクトリ配下に移動させる(*1)。これを毎回手作業で行っていたのでは面倒なので、QuickIRをEXE化するバッチファイルを作成する。
 バッチファイルはこんな感じになる。これを"make_exe.bat"というファイル名で保存する。

@echo off
setlocal
python cxFreeze_setup.py build
rem
rem Created QuickIR.exe file under the follwing directory
rem   32bit: build¥exe.win32-3.5
rem   64bit: build¥exe.win-amd64-3.5
rem 
cd build¥exe.win-amd64-3.5
mkdir images
move *.gif images
endlocal
exit /b

4) EXE化する

 以上で準備は整ったので、"make_exe.bat"を実行して EXE化する。成功すると "build¥exe.win32-3.5""build¥exe.win-amd64-3.5"配下に"QuickIR.exe"が出来ている。

ダブルクリックして正常に起動すれば作業は完了だ。

 それにしても EXEファイル以外に随分と多くのファイルがあるものだ。DLLなどは、もう少し纏められないものだろうか?これについては、何か方法がないか、もう少し調べてみようと思う。

 これまで作成してきた Windowsの EXEファイルにするための"cxFreeze_setup.py", "make_exe.bat"等を取り込んだ QuickIR Ver.1.0.8へのリンクを以下に張っておく。但し、以下には EXE化された QuickIRは含まれてないので、EXE化するためには Python 3.5.2 と cx_Freeze 5.0 が必要なのでご注意。


(*1):2016.11.20追記
 setupスクリプトの'include_files'にはファイルだけでなく、ディレクトリも指定可能であることが cx_Freeze のドキュメントに書かれてあり、こんな事は不要なのだという事が分かった。

List containing files to be copied to the target directory.
It is expected that this list will contain strings or 2-tuples for the source and destination.
The source can be a file or a directory.
The target must not be an absolute path.

 'include_files'リストには、取り込みたいファイルだけでなく、コピー元(source)とコピー先(destination)をタプルにした物も要素に書くことができる。コピー元(source)にはファイルとディレクトリが指定できるとのことだ。そのため、setupスクリプトの'include_files'は以下のように書けば良く、

include_files = [python_dir + r'¥DLLs¥tcl86t.dll',
                 python_dir + r'¥DLLs¥tk86t.dll',
                 'images']

EXE化するバッチファイルも以下のような簡単なものなる。

@echo off
setlocal
python cxFreeze_setup.py build
endlocal
exit /b


< 過去の記事 [ 11月の プログラミング リスト ] 新しい記事 >

2016 calendar
11月
12345
6789101112
13141516171819
20212223242526
27282930


掲示板
最新:08/15 17:19


GsBlog was developed by GUSTAV, Copyright(C) 2003, Web Application Factory All Rights Reserved.