「LinuxでPythonプログラムからアプリを作成したい」
「Linuxで実行可能なELFファイルを作成したい」
このような場合は、cx_Freezeがオススメです。
この記事では、Linuxでcx_Freezeを動かすための方法を解説しています。
本記事の内容
- Linuxでcx_Freezeを動かすために必要なモノ
- cx_Freezeのインストール
- PatchELFのインストール
- cx_Freezeの動作確認
それでは、上記に沿って解説していきます。
Linuxでcx_Freezeを動かすために必要なモノ
cx_Freezeは、Pythonプログラムを実行可能ファイルに変換します。
実行可能ファイルとは、バイナリファイルのことです。
「Pythonプログラムをアプリ化する」
このように表現した方が、一般的にはわかりやすいかもしれません。
Windowsの場合なら、「exe化する」と表現されることが多いです。
exeと聞くと、イメージしやすいですからね。
そのcx_FreezeをLinuxで動かすには、次の要件が必要です。
- Python 3.6以降
- cx_Freeze
- PatchELF
Windowsの場合は、cx_Freezeをインストールしたら動きます。
しかし、Linuxでは追加でPatchELFが必要になります。
ここが、WindowsとLinuxで大きな違いです。
Windowsへのcx_Freezeのインストールは、次の記事でまとめています。
あと、Pythonに関してはできる限りアップグレードはした方がよいでしょう。
Pythonのアップグレードについては、次の記事で説明しています。
では、Linuxでcx_Freezeを動かすために必要なモノをインストールしていきましょう。
なお、検証で用いているOSはLubuntuとなります。
Ubuntu・Debianであれば、そのまま同じコマンドが利用可能です。
cx_Freezeのインストール
2021年11月末時点での、cx_Freezeの最新版は6.8.3となります。
この最新バージョンは、2021年10月23日にリリースされています。
インストールは、次のコマンドを実行するだけです。
pip install cx-Freeze
Python 3.6以降であれば、問題なくインストールできるでしょう。
今回は、次のバージョンのPythonを利用して検証しています。
$ python -V Python 3.9.9
インストールが、完了したら確認しましょう。
次のコマンドを実行します。
$ cxfreeze --version cxfreeze 6.8.3 Copyright (c) 2020-2021 Marcelo Duarte. All rights reserved. Copyright (c) 2007-2020 Anthony Tuininga. All rights reserved. Copyright (c) 2001-2006 Computronix Corporation. All rights reserved.
インストールしたcx_Freezeのバージョンを確認できます。
また、cx_Freezeコマンド使い方はヘルプで確認可能です。
$ cxfreeze -h
ここまで確認できれば、cx_Freezeのインストールは問題ないでしょう。
PatchELFのインストール
PatchELFは、ELFファイルを扱うために必要となります。
ELFファイルとは、Linuxにおける実行可能ファイルのことです。
(※ELF=Executable and Linkable Format)
Linuxでは、ごくごく普通にELFファイルが存在しています。
みなさんも普段から利用しているはずです。
例えば、grepコマンドがELFファイルとなります。
$ file /usr/bin/grep /usr/bin/grep: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=f4564437ed282494b69a191fcb07a56235cce8ff, for GNU/Linux 3.2.0, stripped
よって、PythonプログラムをELFファイルに変換するためにPatchELFが必要ということです。
実際、PatchELF無しでcx_Freezeを用いて実行ファイルを作成しようとするとエラーが出ます。
raise ValueError("Cannot find required utility `patchelf` in PATH")
これは、PatchELFが見つからないという内容のエラーです。
このエラーが出ないためにも、PatchELFをインストールします。
インストールは、次のコマンドで行います。
sudo apt-get install patchelf
インストール後の確認は、次のコマンドで可能です。
$ patchelf --version patchelf 0.11
現時点でのPatchELFの最新バージョンは、0.13です。
しかし、上記の0.11でも問題なくcx_Freezeは動きます。
よって、PatchELFのバージョンは特にこだわる必要がありません。
では、これで準備が整いました。
それでは、実際にcx_Freezeを使ってELFファイルを作成しましょう。
cx_Freezeの動作確認
動作確認では、cxfreezeコマンドを利用します。
基本的には、次のような使い方となります。
cxfreeze -c Pythonスクリプト --target-dir 保存先ディレクトリ
まずは、Pythonのプログラムを用意します。
今回は、Linux環境であるためシンプルなコードとしましょう。
test.py
import sys print(sys.version)
実行すると、Pythonバージョンを表示するだけです。
3.9.9 (main, Nov 21 2021, 13:37:27) [GCC 10.3.0]
このスクリプトを「test」というディレクトリに保存します。
ディレクトリは自動的に作成されます。
そのため、自分で用意する必要はありません。
cxfreeze -c test.py --target-dir test
上記コマンドを実行します。
エラーなく完了すれば、「test」ディレクトリが確認できます。
「test」ディレクトリに移動します。
「test」ディレクトリは、次のような状態です。
「test」ファイルが、ELFファイルです。
$ file test test: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=4ebb3cbf461c6b2894015d5bcf12cf039f48d4a0, for GNU/Linux 3.2.0, stripped
ELFと表示されていることが、確認できます。
では、そのまま実行してみましょう。
$ ./test 3.9.9 (main, Nov 21 2021, 13:37:27) [GCC 10.3.0]
Pythonスクリプト(test.py)を実行した場合と同じ結果です。
これで動作確認としては、十分でしょう。
以上、cx_Freezeの動作確認の説明でした。