Open8

【M1Mac】PythonでFlet + Numpyのプログラムを実行ファイルにする

手羽先手羽先

目標

fletでnumpyを使い、それをwindowsとmacの両方の実行形式ファイルに変換する。

現状

  • pyinstallerだとnumpyをひとまず実行形式にできた

    • venvを使ってクリーンな環境でやると動くようになった
      • fletは試していない

環境

  • 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かの違いっぽいです。(それ以外の違いはわかりません🙏)
以下で紹介されていて知りました。
https://qiita.com/NasuPanda/items/48849d7f925784d6b6a0#auto-py-to-exeでビルド

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で良さそう