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