Poetryでプロジェクトを作る。
takatoh@sofa: w > poetry new fletsample Created package fletsample in fletsample takatoh@sofa: w > cd fletsample
Fletを追加。
takatoh@sofa: fletsample > poetry add flet
flet create
コマンドでプロジェクトを初期化。--template
オプションはひな形の指定で、minimum
と counter
がある(デフォルトは minimum
)。
takatoh@sofa: fletsample > poetry run flet create --template counter . Copying from template version 0.0.0.post9.dev0+cdc6738 identical . create .gitattributes create .gitignore create assets create assets\favicon.png create assets\icon.png create assets\manifest.json create main.py conflict README.md Overwrite README.md? [Y/n] y Done. Now run: flet run
見ての通りいくつかのファイルが作られる。main.py がメインのファイル。テンプレートに counter
を指定したので、ボタンをクリックするとカウンターの数値が変わるアプリの実装が書かれている。
import flet as ft def main(page: ft.Page): page.title = "Flet counter example" page.vertical_alignment = ft.MainAxisAlignment.CENTER txt_number = ft.TextField(value="0", text_align=ft.TextAlign.RIGHT, width=100) def minus_click(e): txt_number.value = str(int(txt_number.value) - 1) page.update() def plus_click(e): txt_number.value = str(int(txt_number.value) + 1) page.update() page.add( ft.Row( [ ft.IconButton(ft.icons.REMOVE, on_click=minus_click), txt_number, ft.IconButton(ft.icons.ADD, on_click=plus_click), ], alignment=ft.MainAxisAlignment.CENTER, ) ) ft.app(main)
アプリを実行するには、flet run
コマンド。新しいウィンドウでアプリが起動する。+
ボタンと -
ボタンをクリックするたびに表示されてる数値が1ずつ変わる。そっけないアプリだけどちゃんと動く。
takatoh@sofa: fletsample > poetry run flet run
-w
オプションを指定すると、webアプリとして起動し、ブラウザが開く。
takatoh@sofa: fletsample > poetry run flet run -w http://127.0.0.1:50767
PyInstaller を追加。
takatoh@sofa: fletsample > poetry add --group dev pyinstaller Using version ^6.1.0 for pyinstaller Updating dependencies Resolving dependencies... The current project's Python requirement (>=3.10,<4.0) is not compatible with some of the required packages Python requirement: - pyinstaller requires Python <3.13,>=3.8, so it will not be satisfied for Python >=3.13,<4.0 Because no versions of pyinstaller match >6.1.0,<7.0.0 and pyinstaller (6.1.0) requires Python <3.13,>=3.8, pyinstaller is forbidden. So, because fletsample depends on pyinstaller (^6.1.0), version solving failed. • Check your dependencies Python requirement: The Python requirement can be specified via the `python` or `markers` properties For pyinstaller, a possible solution would be to set the `python` property to ">=3.10,<3.13" https://python-poetry.org/docs/dependency-specification/#python-restricted-dependencies, https://python-poetry.org/docs/dependency-specification/#using-environment-markers
……なんかエラーが出た。
調べてみると、pyproject.toml ファイルで Python のバージョンを ^3.10
と指定されてるのが原因らしい。PyPI.org の pyinstaller のページには、Python のバージョンについていこんなふうに書いてある。
3.8-3.12. Note that Python 3.10.0 contains a bug making it unsupportable by PyInstaller. PyInstaller will also not work with beta releases of Python 3.13.
pyinstaller 6.1.0 | PyPI.org
これを読むと ^3.10
でよさそうなものだけど……。ともかく、エラーメッセージにあるように、pyproject.toml の中の Python のバージョン指定を書き換えた(3.10.0も避けた)。
python = ">=3.10.1,<3.13"
もう一度、インストール実行。
takatoh@sofa: fletsample > poetry add --group dev pyinstaller
今度は無事インストールできた。ところで、--group dev
はパッケージを開発用にインストールする。従来の --dev
オプションは非推奨で代わりにこっちを使え、とマニュアルに書いてある。 ともあれ、この時点で pyproject.toml ファイルは次のようになった。
[tool.poetry] name = "fletsample" version = "0.1.0" description = "" authors = ["takatoh <[email protected]>"] readme = "README.md" [tool.poetry.dependencies] python = ">=3.10.1,<3.13" flet = "^0.10.3" [tool.poetry.group.dev.dependencies] pyinstaller = "^6.1.0" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"
GUI アプリをビルドするにはメインのソースファイルを指定して flet pack
コマンドを実行する。--name
オプションは出来上がるファイルの名前を指定している。省略すると mein.exe になる。
takatoh@sofa: fletsample > poetry run flet pack --name fletsample main.py
ビルドされたファイルは dist
フォルダの中にできる。
takatoh@sofa: fletsample > ls dist Directory: C:\Users\takatoh\Documents\w\fletsample\dist Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2023/10/21 20:40 31291901 fletsample.exe
エクスプローラで探してファイルをダブルクリックすると、GUIアプリが起動した。うまくいってるようだ。試しに、ファイルをほかの場所、例えばデスクトップに移動しても、ダブルクリックすればちゃんと起動する。
Flet はまだバージョン1.0に届いてなくて開発途中のようだけど、簡単なGUIアプリを作るのにはいいんじゃないかと思えた。見た目もモダンでいい。
PyInstaller も初めて使ったけど、Python をインストールしなくてもいいので、他の人に使ってもらうのにはちょうどいいんじゃないかな。ファイルサイズが30MB以上もあるけど、Pythonの実行環境を含んでいるからこれは仕方がないかな。
[追記]
pyproject.toml での Python のバージョン指定、^3.10
だと 3.13 もOKってことになる。だからエラーが出るんだ。