Open8
【M1Mac】PythonでFlet + Numpyのプログラムを実行ファイルにする
目標
fletでnumpyを使い、それをwindowsとmacの両方の実行形式ファイルに変換する。
現状
-
pyinstallerだとnumpyをひとまず実行形式にできた
- venvを使ってクリーンな環境でやると動くようになった
- fletは試していない
- venvを使ってクリーンな環境でやると動くようになった
環境
- M1Mac
- venv
メインで使うライブラリ&バージョン
実行形式にする
auto-py-to-exe 2.26.1
pyinstaller 5.7.0
pyinstaller-hooks-contrib 2022.14
- pyinstaller
- CUI
- auto-py-to-exe
- GUI
どちらもほぼ同じですが、cuiかguiかの違いっぽいです。(それ以外の違いはわかりません🙏)
以下で紹介されていて知りました。
GUIフレームワークのFlet
flet 0.3.2
計算ライブラリのNumpy
numpy 1.24.1
その他
pip 21.2.4
最終的なライブラリ状態
(fletをインストールした際、fletが必要とするライブラリも入ったのでたくさん入っている)
> python -V
Python 3.9.6
> pip3 list
Package Version
------------------------- ---------
altgraph 0.17.3
auto-py-to-exe 2.26.1
beartype 0.11.0
bottle 0.12.23
bottle-websocket 0.2.9
certifi 2022.12.7
charset-normalizer 2.1.1
Eel 0.14.0
flet 0.3.2
future 0.18.2
gevent 22.10.2
gevent-websocket 0.10.1
greenlet 2.0.1
idna 3.4
macholib 1.16.2
numpy 1.24.1
oauthlib 3.2.2
packaging 23.0
pip 21.2.4
pyinstaller 5.7.0
pyinstaller-hooks-contrib 2022.14
pyparsing 3.0.9
repath 0.9.0
requests 2.28.1
setuptools 58.0.4
six 1.16.0
urllib3 1.26.14
watchdog 2.2.1
websocket-client 1.4.2
whichcraft 0.6.1
zope.event 4.6
zope.interface 5.5.2
まずはauto-py-to-exeでnumpyプログラムを実行形式にできるか確認
import random
from tkinter import messagebox
import numpy as np
arr = np.asarray([1,2,3])
messagebox.showinfo(str(arr), str(arr))
pyinstaller main.py
auto-py-to-exeでも動いた。
とりあえず、numpyは動いた。ただ、めちゃくちゃ単純なプログラムなのに異様に起動が遅い。。
fletアプリを実行形式にしてみる
pyinstaller main.py
auto-py-to-exeでも動いた。
import time
import flet as ft
def main(page: ft.Page):
t = ft.Text()
page.add(t)
for i in range(10):
t.value = f"Step {i}"
page.update()
time.sleep(1)
ft.app(target=main)
やはりワンテンポ遅れるが起動した。
numpy + fletを実行形式にしてみる
pyinstaller main.py
auto-py-to-exeでも動いた。
import time
import flet as ft
import numpy as np
def main(page: ft.Page):
t = ft.Text()
page.add(t)
a = np.asarray([[1, 2, 3], [4, 5, 6]])
for i in range(10):
t.value = f"Step {a*i}"
page.update()
time.sleep(1)
ft.app(target=main)
きたー!
動いた!どうやら、起動に10秒ほどかかるようだ。ただ、とりあえず動くことがわかったので安心。
まとめ
-
FletはNumpyを動かせる
- 他のライブラリも動かせそう!
-
Eelに比べて、Flutterのように部品が用意されているので、プロトタイプや、ささっと作りたいとき、Flutter使いにはとても向いていそう
- Reactやhtml,jsを使いたいとき、細かくカスタマイズしたい時はeelで良さそう
参考