7月 6, 2013
kamata

【python】Python スクリプトを実行ファイルに変換する方法

4月からやり始めたpython。仕事の合間に(というか休み時間とか、休日とか)
やっているが、時間がとれず、遅々として進まないのだが、
本日は予定の無い土曜日、少しやってみた。

今日のテーマは「Python スクリプトを実行ファイルに変換する方法」

py2exeとかpy2appがあるが、どうやらpython3には対応していないとのこと。
ググると、cx_Freezeというのが良さげ。

自分の環境は
OSX10.6
python3.3

■cx_Freezeのインストール
・Windows

http://cx-freeze.sourceforge.net/ から

ダウンロード
cx_Freeze-4.3.1.win32-py3.3.msi を取得し、解凍、インストール。

・OSX

http://cx-freeze.sourceforge.net/ から

ソースのダウンロード
cx_Freeze-4.3.1.tar.gzを取得し、
解凍。

http://www.atsuhiro-me.net/python/dev/cx_freeze-app

を参考にする。(Command Line Toolsなどは既に設定済み)

プラットフォーム依存しないということで、以後はOSXで進める。

cd /Users/xxxx/Desktop/cx_Freeze-4.3.1

python3 setup.py build

warningがでるが、完了。

sudo python3 setup.py install

これもwarningがでるが、完了。

■モジュールがないスクリプトで試す

で、簡単なプロジェクトに対して、setup.pyを作る
メインのスクリプトは、main.py

setup.py
———————————————–
import sys
from cx_Freeze import setup, Executable

base = None
if sys.platform == “win32″:
base = “Win32GUI”

setup(  name = “CHOOOSEFILE”,
version = “1.0″,
description = ‘converter’,
executables = [Executable("main.py", base=base)])
———————————————–

cd ~/自分のプロジェクト
python setup.py build

すると、プロジェクト内にexe.macosx-10.6-intel-3.3/buildフォルダができ、
いろいろと出来ているが、mainファイルがあって、それをダブルクリック。

無事動作した! パチパチ

■モジュールがある場合で試す

今作っているスクリプトの多くは、lxmlという、xmlを扱うモジュールが必要。
これを含める必要がある。

setup.py
———————————————–
import sys
from cx_Freeze import setup, Executable

copyDependentFiles = True
silent = True
base = None
includes = ['lxml', 'lxml._elementpath','lxml.etree', ~他のモジュール]
excludes = []

if sys.platform == “win32″:
base = “Win32GUI”

setup(  name = “myPythonProgram”,
version = “1.0″,
options = {“build_exe”: {“includes”:includes, “excludes”:excludes}},
executables = [Executable("main.py",base=base)]
)
———————————————–

python setup.py build
をすると、エラーもでず、実行ファイルができる。

で、ダブルクリックすると….

from lxml import etree
ImportError: cannot import name etree

となって、実行されず。
ここから、いろいろ試行錯誤、ググりまくる。
2時間ほど、格闘。

で、結果OKとなったのが、

setup.py
———————————————–
import sys
from cx_Freeze import setup, Executable

copyDependentFiles = True
silent = True
base = None
packages = ['lxml']
includes = [他のモジュール]
excludes = []

if sys.platform == “win32″:
base = “Win32GUI”

setup(  name = “myPythonProgram”,
version = “1.0″,
options = {“build_exe”: {“includes”:includes, “excludes”:excludes, “packages”: packages}},
executables = [Executable("main.py",base=base)]
)
———————————————–

packagesという書き方があるのですね。

これでできた、実行ファイルをダブルクリックすると、
あら、ステキ、瞬時に処理完了しました。

この段階では、buildフォルダに、いろんなファイルができていて、app形式にはなっていません。
そこで、

python3 setup.py bdist_mac を実行します。

buildフォルダの直下に、appができました。
appをダブルクリックして、実行! 完了!

今日は気持よく終えて、スッキリです。

Leave a comment