Python2.7のプログラムをexe化する

次に、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化に成功しました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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