exe化とは
exe化とは、PythonをインストールしていないPCでもファイルを実行できるようにすることです。通常、PythonファイルはPCにPythonをインストールしていないと動作しません。しかし、作成したファイルを第三者に渡したい時、相手のPCにPython環境が整っているかは分かりません。そんな時、exe化した実行ファイルを渡すことで、相手の環境によらずファイルを使ってもらうことができます。
Pythonスクリプトexe化の方法
exe化の方法はcx_FreezeやPyinstallerなどいくつかあります。
今回はcx_Freezeに関して、exeファイル作成後にうまく動作せずに試行錯誤した箇所を記載します。
cx_Freezeの使い方を簡単に言うと、
①exe化するスクリプト②setup.py
を準備して、setup.pyを実行です。
cx_Freezeで苦しんだ箇所
cx_Freezeではビルドする用のsetup.pyファイルを使用します。
基本的には下記コードで、対象pythonスクリプトのファイル名を加えて実行するとexeファイルが作成できます。
import sys
from cx_Freeze import setup, Executable
base = None
exe = Executable(script = "対象Pythonスクリプトのファイル名.py")
setup(name = 'your_filename',
version = '0.1',
description = 'converter',
executables = [exe])
しかし、最近SQLデータベースをPythonで操作するファイルを作成したときに上手く動作せず、解決に苦しみました。
どうやって解決したか
PythonでSQLデータベースを操作するために、SQLModelライブラリを使用していたのですが、そこで使用しているsqlAlchemyパッケージが検出されておらずにファイルが正常にexe化できていませんでした。
初めはcx_Freezeとパッケージの干渉を疑って、バージョンなど変更してみましたが解決せず。試行錯誤の結果、下記のようにbuild_exe_optionsのpackagesにsqlalchemyを記載してビルドの設定をすることで、exeファイルは上手く動作しました。packagesに指定することでファイルビルド時にsqlalchemyを検出できたようです。デフォルトではcx_Freezeがパッケージを自動検出していますが、今回のsqlalchemyは検出ができないため、setup.pyで明示的に指定する必要がありました。
本来はこうやって使用しているパッケージをすべて記載しないといけないのかも。。
import sys
from cx_Freeze import setup, Executable
base = None
build_exe_options = {
"packages": [
"sqlalchemy",
]
}
exe = Executable(script = "対象Pythonスクリプトのファイル名.py")
setup(name = 'your_filename',
version = '0.1',
description = 'converter',
options ={"build_exe":build_exe_options},
executables = [exe])
exeファイルを配布してラクしよう
exe化ができると、自分が作成したファイルを使ってもらうことができるので効率化が進みます。相手にこんな作業をやってもらいたい、という時に作業をできるだけプログラムにして相手に渡せると、作業の間違いリスクも発生しにくいです。結果的に自分がラクできることにつながります。
exe化して、配布して、ラクしましょう。
Join our team!
ご覧いただきありがとうございました。テラドローンではエンジニアを募集しています!一緒にテラドローンで技術のアップデート・社会に役立つプロダクト開発を行っていきたい方
ぜひCasual Talk へ気軽にお申し込みください。
kosuke_imamura
組込みエンジニア
測量開発部 /Terra Lidar開発
Python/C++/ROS
山とスノボとバイクが好きです。