趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • Python2.7のプログラムをexe化する

    投稿日 2018年 6月 11日 コメントはありません

    次に、Python2.7で作ったプログラムを配布用にexe化してみます。
    まず、仮想環境を作ります。

    D:\virtual-python>py -2 -m virtualenv py2exe1 --system-site-packages
    New python executable in D:\virtual-python\py2exe1\Scripts\python.exe
    Installing setuptools, pip, wheel...done.
    D:\virtual-python>cd py2exe1
    D:\virtual-python\py2exe1>scripts\activate.bat
    (py2exe1) D:\virtual-python\py2exe1>

    次に、py2exeをインストールします。試しにpipでやってみると、

    (py2exe1) D:\virtual-python\py2exe1>py -2 -m pip install py2exe
    Collecting py2exe
    Downloading https://files.pythonhosted.org/packages/e9/a9/040d38b60bca5b19ff5599a6cbe52b4b9a4fb27986a44fc35f72d9e729e6/py2exe-0.9.2.2.zip (129kB)
    100% |################################| 133kB 2.3MB/s
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "c:\users\xxxxxxxx\appdata\local\temp\pip-install-xhrt4i\py2exe\setup.py", line 10, in <module>
    raise RuntimeError("This package requires Python 3.3 or later")
    RuntimeError: This package requires Python 3.3 or later
    
    ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in c:\users\xxxxxxxx\appdata\local\temp\pip-install-xhrt4i\py2exe\
    
    (py2exe1) D:\virtual-python\py2exe1>

    ということで、pipでインストールできるpy2exeはpython3.3以降が必要、ということでエラーになります。ですので、sourceforgeから2.7用のインストーラをダウンロードしてきて実行します。インストーラはexe形式のGUIになっていて、デフォルトでは大元のsite-packagesの下にインストールされるようです。

    exeに変換するにはセットアップスクリプトが必要なようですので、まずは以下の内容で作成しました。

    from distutils.core import setup
    import py2exe
        
    option = {
        'compressed' : 1,
        'optimize' : 2,
        'bundle_files' : 1,
    }
    
    setup(
        options = {
            'py2exe' : option ,
        },
        console = [
            {'script' : 'main.py'}
        ],
        zipfile = None,
    )

    今回は、メインのスクリプト(処理が始まるところ)は main.py なので、main.py を指定。bundle_filesに1を指定すると、生成したexeファイルにランタイムdllを含めてくれるので、配布が楽になります。(代わりにサイズが大きくなります)

    自作のログ解析ツールをLOGというサブディレクトリにソースコードを一式置いてexe化してみました。

    (py2exe1) D:\virtual-python\py2exe1>cd LOG
    (py2exe1) D:\virtual-python\py2exe1\LOG>python setup.py py2exe
    running py2exe
    creating D:\virtual-python\py2exe1\LOG\build
     :
     :(途中略)
     :
    copying C:\Python27\DLLs\unicodedata.pyd -> D:\virtual-python\py2exe1\LOG\build\bdist.win32\winexe\collect-2.7
    *** copy dlls ***
    copying C:\WINDOWS\system32\CRYPT32.dll -> D:\virtual-python\py2exe1\LOG\build\bdist.win32\winexe\collect-2.7
    copying C:\WINDOWS\system32\python27.dll -> D:\virtual-python\py2exe1\LOG\build\bdist.win32\winexe\bundle-2.7
    setting sys.winver for 'D:\virtual-python\py2exe1\LOG\build\bdist.win32\winexe\bundle-2.7\python27.dll' to 'py2exe'
    copying C:\Python27\lib\site-packages\py2exe\run.exe -> D:\virtual-python\py2exe1\LOG\dist\main.exe
    Adding python27.dll as resource to D:\virtual-python\py2exe1\LOG\dist\main.exe
    The following modules appear to be missing
    ['ElementC14N', '_scproxy', 'cElementTree', 'distutils.command', 'distutils.command.build_ext', ... ]
    
    *** binary dependencies ***
    Your executable(s) also depend on these dlls which are not included,
    you may or may not need to distribute them.
    
    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.
    
       OLEAUT32.dll - C:\WINDOWS\system32\OLEAUT32.dll
       USER32.dll - C:\WINDOWS\system32\USER32.dll
       SHELL32.dll - C:\WINDOWS\system32\SHELL32.dll
       ole32.dll - C:\WINDOWS\system32\ole32.dll
       ADVAPI32.dll - C:\WINDOWS\system32\ADVAPI32.dll
       WS2_32.dll - C:\WINDOWS\system32\WS2_32.dll
       GDI32.dll - C:\WINDOWS\system32\GDI32.dll
       KERNEL32.dll - C:\WINDOWS\system32\KERNEL32.dll
    
    (py2exe1) D:\virtual-python\py2exe1\LOG>

    それほど時間がかからずに処理が終わり、buildとdistというサブディレクトリができて、distの下にmain.exe という実行ファイルが作成されていました。今回の場合はサイズは6MBほど、できた実行ファイルを実行してみると、特に問題なく動作しました。

    ということで、意外にあっさりexe化に成功しました。


    コメントをどうぞ(日本語のみ/Only in Japanese)

    日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)