[HN Gopher] PyScript: Run Python in your HTML
___________________________________________________________________
PyScript: Run Python in your HTML
Author : gripfx
Score : 142 points
Date : 2022-04-30 16:52 UTC (6 hours ago)
(HTM) web link (pyscript.net)
(TXT) w3m dump (pyscript.net)
| [deleted]
| farmin wrote:
| I suppose this is how I can get python into flutter app too?
| anakaine wrote:
| Now there's an Idea!
| asimjalis wrote:
| The GitHub repo has a more concrete overview.
|
| https://github.com/pyscript/pyscript
|
| Would be nice if there was a demo on the page that didn't require
| installing NPM and other stuff on my machine.
| obert wrote:
| https://pyscript.net/examples/
| ak391 wrote:
| cool project, check out https://gradio.app/ as well, makes a web
| demo with just python
| stavros wrote:
| I really really like this, but 4 MB zipped is a bit of a hard
| sell :/ I've had a need to deploy small ad-hoc HTML tools at
| work, though, and my Python is much better than my JS, so maybe
| it's worth it.
| kzrdude wrote:
| For one of the examples, I saw it coming down with pyscript.js
| - 1.1 MB, pyodide.asm data + wasm of 16 MB, and each python
| package as a separate wheel download (cool!), matplotlib of 6MB
| :)
| qbasic_forever wrote:
| Local intranet / work tools would actually be a good use case
| for this as the load is small (tens, hundreds, maybe thousands
| of employees at absolute most) and mostly the same repeat users
| so browser caching would make it snappy for them on future
| visits.
|
| A public marketing page where it's the random internet of
| totally new/anonymous users who want to instantly find out info
| about your product would be the worst use case for this IMHO.
| ericd wrote:
| Pyodide is really cool, we got a Python library we were working
| on working in JS in the browser with it, including Pandas iirc,
| without too much trouble (though getting http requests working
| required a little hackery).
| grej wrote:
| This is awesome and has so much potential!
|
| Regarding the size of the download, I know there is ongoing work
| in the Pyodide project to create a much smaller python runtime
| that will help tremendously. Also, the script will be cached once
| you download it once.
|
| EDIT: Also, you don't need NPM or anything locally to run these
| closed wrote:
| For some reason, I can't see this linked anywhere on the site,
| but there is an examples page:
|
| https://pyscript.net/examples/
|
| (This was presented today as a pycon keynote talk!)
| tomatowurst wrote:
| okay thought it wasn't working because it seems to take a long
| time for the spinner to go away. but I'm very impressed with
| the todo.py! This is what frontend should be and in 5 years or
| so I wouldn't be surprised to see python taking over. If only
| the initial payload for the python runner was smaller and if
| only browsers started supporting webassembly/python stack out
| of the box!!! from datetime import datetime
| as dt from utils import add_class, remove_class
| from js import console tasks = [] #
| define the task template that will be use to render new
| templates to the page task_template = Element("task-
| template").select('.task', from_content=True) task_list
| = Element("list-tasks-container") new_task_content =
| Element("new-task-content") def add_task(*ags,
| **kws): # create task task_id =
| f"task-{len(tasks)}" task = {"id": task_id, "content":
| new_task_content.element.value, "done": False, "created_at":
| dt.now()} tasks.append(task) #
| add the task element to the page as new node in the list by
| cloning taskHtml = task_template.clone(task_id,
| to=task_list) taskHtmlContent = taskHtml.select('p')
| taskHtmlContent.element.innerText = task['content']
| taskHtmlCheck = taskHtml.select('input')
| task_list.element.appendChild(taskHtml.element)
| def check_task(evt=None): task['done'] = not
| task['done'] if task['done']:
| add_class(taskHtmlContent, "line-through") else:
| remove_class(taskHtmlContent, "line-through")
| new_task_content.clear() taskHtmlCheck.element.onclick
| = check_task def add_task_event(e): if
| (e.key == "Enter"): add_task()
| closed wrote:
| I tried the clock example and it worked, but I needed to wait
| maybe 30 seconds after page load..
| mft_ wrote:
| As a way of interacting with the DOM, this makes me very
| uncomfortable: # add the task element to
| the page as new node in the list by cloning taskHtml
| = task_template.clone(task_id, to=task_list)
| taskHtmlContent = taskHtml.select('p')
| taskHtmlContent.element.innerText = task['content']
| taskHtmlCheck = taskHtml.select('input')
| task_list.element.appendChild(taskHtml.element)
|
| We can surely make such things easier in 2022?
| saghm wrote:
| I imagine that if Python were supported out of the box in
| browsers like JavaScript is, frameworks would emerge for
| this sort of thing. At this point though, I'm not sure I
| think it's particularly likely that browsers will support
| additional languages instead of just preferring people
| compile to WASM and use some JavaScript over it.
| edmcnulty101 wrote:
| They don't seem to be working on Android Chrome.
| nmstoker wrote:
| Works fine for me on a Pixel 6XL. It does need to let the
| pyodide files load, but they get cached, so for me, having
| previously loaded a demo a month or so ago, it loaded the
| Todo app almost instantly.
|
| A few brief delays came with the matplotlib examples but
| nothing too bad (seconds not minutes)
| asimjalis wrote:
| The js and css files should be hosted on a CDN otherwise people
| copying/pasting these demos might chew up pyscript.net
| resources.
| aitoehigie wrote:
| Or at least add the js and css files to the zip file.
|
| Which curiously wasnt included.
| als0 wrote:
| I for one welcome our new WASM overlords
| VWWHFSfQ wrote:
| Is this similar at all to the old pyjs/pyjamas project? I had
| some fun playing with that but there was no way I would have ever
| actually made anything serious with it.
| grej wrote:
| That was a very cool project, though I believe they aren't
| really related, even though they seem similar. Pyjs/Pyjamas was
| a more of a Python to JavaScript transpiler.
|
| This is the actual CPython runtime with full standard library
| and many of the Python mathematical and plotting libraries
| compiled to WASM, running in the browser. It can also be
| included with other HTML and JavaScript on a web page just by
| wrapping the Python in a tag.
| prpl wrote:
| I made a few internal UIs with it. It was easy for that and
| worked well (and fun). This was 2010
| hoten wrote:
| Super cool.
|
| Any reason to use a custom element `py-script` vs a script tag
| with custom type?
___________________________________________________________________
(page generated 2022-04-30 23:00 UTC)