【Linux】cx_FreezeによるPythonプログラムのアプリ化

【Linux】cx_FreezeによるPythonプログラムのアプリ化 プログラミング

「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の動作確認の説明でした。

タイトルとURLをコピーしました