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種類の改善策をとる。
hookファイルの作成
バイナリの加筆
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を加筆しよう”
サンプル
この記事が気に入ったらサポートをしてみませんか?