GIS奮闘記

現役GISエンジニアの技術紹介ブログ。主にPythonを使用。

PythonスクリプトのEXE化

さて、前回はWxpythonのインストールについてでしたが、今回は作ったスクリプトをEXEに変換する方法を書きたいと思います。これでArcpyをGUIで動かすことができますね。変換にはpy2exeというライブラリを使用します。

■py2exeのダウンロード
下記リンクよりpy2exeをダウンロードしましょう。

http://sourceforge.net/projects/py2exe/files/py2exe/

ダウンロード終了後、インストールを行います。全てデフォルト設定で構いません。

■exe化
exe化にあたり、必要なものは下記4つとなります。

  • py2exe (変換ライブラリ)
  • sample.py(変換元ソースファイル、ファイル名は任意)
  • setup.py(セットアップスクリプト、ファイル名は任意)

1つ目は問題ないと思います。2つ目は上記でクリア。3つ目と4つ目について書きます。

まずはソースファイルです。
■ファイル名:sample.py

# -*- coding: utf-8 -*-
import wx

class MyForm(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, title='My Form')
        self.panel = wx.Panel(self, wx.ID_ANY)

if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MyForm().Show()
    app.MainLoop()

実行するとフォームが立ち上がるだけの単純なプログラムです。
次はセットアップスクリプトです。

■ファイル名:setup.py

# -*- coding: utf-8 -*-
from distutils.core import setup
import py2exe

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

setup(
    options = {
        "py2exe"    :    option
    },

    windows = [
        {"script"   :    "sample.py"}
    ],

    zipfile = None
)

注意が必要なのは「bundle_files」です。64bitの場合はここを1、2にすると動きません(うーん、なぜなのか)。「bundle_files」=1がランタイムdllを含めてということ。2がその逆です。3は何なのだろうか・・・ちなみに他は

  • 「compressed」 出力を圧縮するかしないか
  • 「optimize」 最適化するかしないか

です。また、GUIの場合は「windows」という指定が必要です。そうでない場合は「console」と指定してください。

これで準備完了です。それではEXE化を始めましょう。

  • 上記2ファイルを適当なディレクトリに配置
  • python setup.py py2exe を実行


実行するとこんなメッセージが出ますが、無視してかまいません。
Make sure you have the license if you distribute any of them, and
make sure you don't distribute files belonging to the operating system.

ole32.dll - C:\Windows\system32\ole32.dll
OLEAUT32.dll - C:\Windows\system32\OLEAUT32.dll
USER32.dll - C:\Windows\system32\USER32.dll
COMCTL32.dll - C:\Windows\system32\COMCTL32.dll
SHELL32.dll - C:\Windows\system32\SHELL32.dll
MSVCP90.dll - C:\Windows\system32\MSVCP90.dll
WINMM.dll - C:\Windows\system32\WINMM.dll
WSOCK32.dll - C:\Windows\system32\WSOCK32.dll
COMDLG32.dll - C:\Windows\system32\COMDLG32.dll
ADVAPI32.dll - C:\Windows\system32\ADVAPI32.dll
WS2_32.dll - C:\Windows\system32\WS2_32.dll
WINSPOOL.DRV - C:\Windows\system32\WINSPOOL.DRV
GDI32.dll - C:\Windows\system32\GDI32.dll
KERNEL32.dll - C:\Windows\system32\KERNEL32.dll
RPCRT4.dll - C:\Windows\system32\RPCRT4.dll

対象のディレクトリに「build」「dist」というフォルダが作成されたと思います。「dist」フォルダにEXEが格納されています。
f:id:sanvarie:20151115103338p:plain

EXEを実行してみます。
f:id:sanvarie:20151115103511p:plain

成功しました。これでEXE化の完了です!