見出し画像

PythonでSymbolを使ったアプリを生成する際の注意点

※2024/9/5編集
アプリソフトはThonnyではなくTkinterでした。


Symbolとは

 Symbolとは、ブロックチェーンの一種であり、現在比較的主流とされているEVM方式、「ブロックチェーンの中にプログラムを入れてそれを使って動かす方式」を使わず、さまざまなプログラミング言語に対応した拡張ツールSDKを使ってノードを経由してブロックチェーンに指示を送って情報を得たりブロックチェーンを動かしたりする、「REST API方式」をとっていることを特徴とする。

 現在観測されているうちでは

  • javascript(typescript)

  • Python

  • C#

のSDKがあり、有志製作ではあるが

  • Dart

  • PHP

のSDKもある。アプリやデバイスに比較的組み込みやすいブロックチェーンである。

Symbolを用いたPythonアプリ作成に関して

 Pythonは様々な方法でアプリを作ることができるが、今回はマイクロコンピュータのraspberrypiでも作ることができるTkinterを例にしてあげていく。Tkinterの導入、pipの使い方に関しては省略する。
 PythonでSymbolを使うには、この拡張ツールをコマンドから導入する。

pip install symbol-sdk-python

 また、暗号化の都合上、ripemd-hashも使うのでこれも導入しておく。

pip install ripemd-hash

 その後アプリのレイアウト、動きを確認出来たら、コマンドのPyinstallerを使って実行ファイルを作成する。

pip install pyinstaller
pyinstaller <Appname>.py --onefile
/*ディレクトリを移動しておく*/

 これで実行ファイルが作成できる…はずだったのだ。
 
しかしこれで作った実行ファイルはなぜか起動しない。なぜか?このようなエラーが発生するからである。

Cannot load native module 'ripemd._ripemd160'
Not found '_ripemd160.cp312-win_amd64.pyd', Not found '_ripemd160

エラーはなぜ発生するか

 ripemdの実行ファイルである.pydファイルだったりそうじゃない拡張子だったりするものが見つからないからである。

エラーの改善

 pyinstallerでアプリを作ったとき、.specファイルというものができる。これは実行ファイルの詳しい情報が載っている。これの詳しい説明も今回は省く。それほど私は詳しくない。
 ここで2種類の改善策をとる。

  1. hookファイルの作成

  2. バイナリの加筆

hookファイルの作成

 hookファイルとは追加の設定用のファイルである。ripemdファイルを読み込むために、追加で設定をする。この時hooksというファイルにhook用のファイルを入れるとよい。ちなみにこれも.pyである。

from PyInstaller.utils.hooks import collect_dynamic_libs

# ripemdモジュールのネイティブライブラリを収集する
binaries = collect_dynamic_libs('ripemd')

specファイルの加筆

 specファイルのバイナリも加筆する。ripemdの.pydファイルは以下のコマンドで探す。

pip show ripemd

 その後、そのディレクトリにある.pydファイルのディレクトリをspecファイルに加筆する。ついでにhookファイルも追記しておく。

    binaries=[('/*directory*/\\_ripemd160*.pyd', 'ripemd')],
    hookspath=['/hooks'],

 最後にspecファイルで実行ファイルを作ればおそらくできるだろう。

pyinstaller --clean <Appname>.spec

まとめ

 Symbolを用いたPythonアプリを作るときは、
”ripemdを読み込ませるようにspecを加筆しよう”

サンプル

この記事が気に入ったらサポートをしてみませんか?