Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding web support #138

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Open

Conversation

SebieF
Copy link

@SebieF SebieF commented Feb 13, 2025

Hello, first of all: Thanks for the amazing project, it allows me to use a lot of scientific python packages, that I would have to re-write in Dart otherwise :)

I hope that I did not overlook something, but it seems like there is no implementation for running the python app on the web platform yet. This PR solves that situation.

About my approach:

  • Package the python app to a .zip as previously
  • Unzip the package in the asset directory and add all relevant paths to the asset section in pubspec.yaml
  • Running SeriousPython.run on the browser does the following:
    • It adds the pyodide.js library from https://cdn.jsdelivr.net/pyodide/v0.27.2/full/pyodide.js to the html file
    • Then, all required packages are read from the requirements.txt file and imported via pyodide
    • All additional modules are loaded (other python files, if provided)
    • I am using the environment variables to declare, which command should be executed (to enable a "server-like" architecture)
    • The result is read in Dart from a pyodide_result variable that needs to be assigned with the command result and returned as a string

I used this synchronous command approach, because for me, it does not seem to be possible to use Flask inside of a browser environment.

I also know that my approach can definitely be improved, but I unfortunately do not have the time currently to do so. I still wanted to create the PR to get feedback on the general approach and to enable community efforts :)

Possible improvements:

I am grateful for receiving any feedback!

@CLAassistant
Copy link

CLAassistant commented Feb 13, 2025

CLA assistant check
All committers have signed the CLA.

@FeodorFitsner
Copy link
Contributor

I'm going to take a look when have time! Looks interesting. Right now web support is a part of Flet app template which is not ideal.

@FeodorFitsner
Copy link
Contributor

Just a thought - it would be great to use serious_python_web for both client-side runtime (Pyodide) and server-side (connecting to server Python via websockets), like see this page is adoptable for both scenarios: https://github.com/flet-dev/flet/blob/main/client/web/index.html

I see you are dynamically injecting JS references, which I like, I'm just wondering if we can adopt the approach for server-side run too.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants