GNURadioで作ったpyファイルをexe化して使う

Python

GNURadioで作成したpyファイルは、GNURadio Command Prompt上でしか動作しないので、とても使い勝手が悪いです。

今回は作成したpyファイルをGNURadioをインストールしていないWindows PC上動作するようにできるexe化を紹介します。(注:ZadigのUSBドライバーだけはインストールが必要です。)

Windowsは家庭でも職場でも広く使われるOSなので、一つのファイルで実行できると利便性も飛躍的に向上します。

Pythonのexe化とは

GNURadioで作ったpyファイルはpythonという言語で記述されており、PythonをインストールしているPCでのみ動作します。

またGNURadioは多くの信号処理ライブラリを呼び出して動作する仕組みですから、GNURadioのライブラリも必要となり、必然的にGNURadioがインストールされていないとpyファイルは動きません。

今回紹介するexe化で、巨大なGNURadioをインストールをせずにどのPCでも動作させることが可能になります。

exe化は、.exeという実行形式のファイル内にライブラリなど動作に必要なファイルを一包化する方法でWindows特有のまとめ方になります。

しかしメリットばかりではなくデメリットもあります。

一番のデメリットはexeの中にライブラリなどを包含するため、exeのファイルサイズが大きくなることです。2つ目のデメリットは起動が遅くなることです。

筆者の場合は、FMラジオを録音するだけのファイル(16KB)のGNURadio pyファイルをexe化をすると33MBになりました。QTというウィンドウ表示まで表示すると84MBくらいになりました。

このサイズくらいでしたら、今どきのSSD高速ストレージでは許容サイズであり、それほど問題ではありません。

GNURadioを起動してスクリプトを動作させるより、1ファイルで動作できることの利便性が圧倒して勝っているのでexe化で使うのが一番良さそうです。

Pythonのexe化は2手法ある

exe化するには2つの方法がありました。(その他もありますが動作が不安定なので本記事では割愛します)

  • Pyinstallerを使う方法:従来からある方法、お手軽ですがファイルサイズが大きくなることと、動作が遅いという欠点があります。
  • py2exeを使う方法:1ファイルには出来ないみたいですが、その分、起動が速くファイルサイズも小さいです。最近はこちらのほうが人気のようです。

GNURadioの環境では、Pyinstallerでのみexe化出来ました

Py2exeは、GNURadioのpython 3.9のライブラリファイルの連結に問題があり、何度やってもコンパイルでFailになりました。ネット上で確認するとまだ利用出来ない状況なので、python3.8以下にする等の対処が紹介されています。

しかし、GNURadio3.8ではPython3.9(のフルカスタム仕様)が付属しており、バージョンダウンは不可能ですから、必然的にPyinstallerのみが使用できる状況でした。

Pyinstallerを使ってみる

Pyinstallerの導入は以下の手順です。

GNURadio3.8がインストールされた状態で、GNURadio Command Promptからコマンドプロンプトを起動します。

ネットに繋がった状態でpipコマンドでインストールします。エラーがなければインストール成功です。インストール自体はとても簡単です。

> python -m pip install pyinstaller

GNURadioで生成したpyファイルをgnuradio_test.pyをexe化するには、次のように入力します。

コマンドラインのモジュール名であるPとIは大文字ですから注意して入力します。

> python -m PyInstaller gnuradio_test.py --onefile

オプションに「--onefile」を指定することで、関連するファイルを纏めて1つのexeにしてくれます。「--onefile」を指定せずに実行すると、実行に必要な複数のファイルが生成され、生成されたファイルがないと動作出来ません。

ビルドが終わるといくつかのフォルダが生成されます。

exe化したプログラム本体は「dist」というフォルダに格納されています。

「build」には中間ファイルが生成されており消しても構いませんが、小変更のビルドなら時間が節約できるので、ストレージの容量が切迫していなければそのままおいておくのが良いと思います。

exeファイルを実行してみると、GNURadioのフローグラフ画面と同じ動作をすることができます。

exeファイルならGNURadio環境がなくても動作する

exe化するとZadigドライバーのインストール(この記事参照)だけでどのPCでも動作するようです。

このexeファイルはファイルサイズが大きいという難点はありますが、sdrsharpの.NET SDKもHDSDRのインストールも不要で、ソフトウェア無線が使えることになります。

またpyファイルを単にFMラジオを聞くだけの記述にしておくと、exeをダブルクリックで動作させるだけでFMラジオが聞こえるので、誰でも使えるようになりものすごく利便性が向上します。

SDRを普段使いをしようとしている方や、pythonのプログラムが出来る方は、オススメです。