I’m pretty new to Python because I haven’t used it much for many projects over the years, but i decided to use it to make a web app recently with flask to practice. It calls a simple python program that does some file conversion. There’s no database.
I’m hosting it on Python Anywhere for free right now. It’s for an old TTRPG, so useful for a niche community, but probably not big enough to be worth hosting fees. Just in case, I’d also like to be able to keep an installer on my github or a Dropbox. The hope is others can still grab it, spread it, and install it long after I’ve lost interest or gotten hit by a bus.
From my googling, I see 3 main options:
- Path 1: Keep the basic structure of a web app and use one of the frameworks that let me run it in a computer’s browser offline.
- The options here seem to be Flaskwebgui, Electron, or NW.js.
- This seems the simplest and most straightforward way.
- Web GUI is ubiquitous nowadays.
- Part of me also doesn’t like that everything has become a web app. I don’t even know why. Maybe I don’t like the idea of Google controlling everything.
- Path 2: Keep the basic backend logic but rewrite the web GUI with a desktop GUI, making it more of a true native desktop app.
- The options here seem to involve using pyinstaller and then some python GUI library/framework like Tkinter, PyQt, PySide, or Dearpygui.
- I feel this will be slightly more work but it’s a super simple UI so remaking it isn’t a huge deal.
- My instincts tell me the end result might be faster, since it won’t have to deal with a browser middleman or web routes and such. But, I might be wrong, it might just be my old-ass not used to everything being an electron app nowadays.
- Might also be more self-contained from carrying it’s own libraries and not relying on browser compatibility? Idk.
- Probably more OS dependent, though. Not sure how easy it is to make it work with PC, Mac, and Linux users.
- Path 3: There seems to be some way to combine flask and pyinstaller so sounds like a combination of the two is an option, too. Haven’t looked into this too much though since most of my search results talked about the above two paths.
So which way is best? And which framework/library/tool in that path?
When/if the OP were to follow your advice, look into textual (a terminal UI framework). BUT, the OP will run into the issue of the GUI blocking when trying to do heavy background tasks.
So it’s a big ask. Resolving that issue is another rabbit hole on top of the rabbit hole you suggested. Kindly, very kindly, your advice is several years premature.
Instead of adding more features, the OP should concentrate on filling out his Python skillset. Starting first with learning collaboration.
If we were to offer PRs would the OP be able to rebase / git pull to update his copy. This alone might be a big ask. So this is the #1 question that must precede everything else.
If the OP can accept PRs and collaborate then basically everything is lacking.
- strict type checking formatting and linting
- unit testing (can barely tell he’s using pytest)
- pre-commit
- tox
- packaging
- CI/CD (gh actions) including publishing
- Sphinx documentation including in-code documentation (without napoleon extension)
Basically everything.
Everyone in this forum is capable of helping to raise the quality of his work (choose that word carefully to avoid calling that a package). But will we lift a finger to help him?
The OP has reached what he can do by himself. Lets be honest, ChatGPT has reached it’s limits. Getting the rest of the way would take years of study.
… or we could help him