[HN Gopher] PyScript: An open source platform for Python in the ...
___________________________________________________________________
PyScript: An open source platform for Python in the browser
Author : xiaodai
Score : 218 points
Date : 2024-08-16 07:01 UTC (15 hours ago)
(HTM) web link (pyscript.net)
(TXT) w3m dump (pyscript.net)
| Loeffelmann wrote:
| How is this different from pyodide[0]?
|
| [0]: https://pyodide.org/en/stable/
| santiagobasulto wrote:
| This _uses_ pyodide. It 's more like a Python to JS transpiler
| (even if it's not). It's to create browser apps using Python.
| So it's Pyodide + a browser API.
| azakai wrote:
| They also support MicroPython as an option now and not just
| Pyodide,
|
| https://pyscript.net/tech-preview/micropython/about.html
|
| In fact the main PyScript site uses MicroPython now, I see in
| the dev console (micropython.mjs and micropython.wasm).
| qsort wrote:
| Pyodide is a port of CPython to the WebAssembly platform.
| PyScript is a framework that uses Pyodide to provide a
| framework for developing Python applications in the browser.
| Its elevator pitch would be "python inside script tags via
| pyodide".
| v3ss0n wrote:
| Its a wrapper.
| bouncing wrote:
| Pyodide is a runtime.
|
| PyScript can use Pyodide _or_ MicroPython. MicroPython is
| actually quite small.
|
| On top of the runtime, PyScript gives you some pleasantries and
| a lot of quality-of-life improvements for actually using Python
| for web programming, not just being able to run Python code.
| mg wrote:
| The homepage left me confused, and also after reading the
| documentation, I'm not sure what this is.
|
| I tinkered a bit to try it myself.
|
| Turns out you can throw this into your website and it will
| display "Hello World": <script type="module"
| src="https://pyscript.net/releases/2024.8.2/core.js"></script>
| <script type="py"> import js
| js.document.querySelector("body").innerText = "Hello World"
| </script>
|
| So it seems to be a script that looks for scripts of type "py"
| and transpiles them from Python to JavaScript via Pyodide?
|
| On the other hand, the demo on the homepage is a repl. And the
| title says "platform". So I'm still confused.
| pansa2 wrote:
| > _transpiles them from Python to JavaScript_
|
| There are projects that do that, but it looks like PyScript
| instead runs Python code directly. It uses a Python interpreter
| compiled to WebAssembly - either CPython (from Pyodide) or
| MicroPython.
| deisteve wrote:
| does this mean we can install FastAPI in the browser?
| bouncing wrote:
| I mean, maybe, but you'd have trouble with sandboxing when
| you try to open a socket.
| rty32 wrote:
| Without actually reading the documentation or source code -- I
| guess "js" package is just an API that somehow maps to the real
| "window" object and calls those DOM methods via some sort of
| Proxy object.
| mg wrote:
| Probably. It is part of Pyodide, not something this PyScript
| project adds:
|
| https://pyodide.org/en/stable/usage/quickstart.html#accessin.
| ..
| dr_kiszonka wrote:
| I found some info about the terminal here:
| https://docs.pyscript.net/2024.8.2/user-guide/terminal/
|
| (I was hoping to be able to run Python in the browser's
| console.)
| sjamaan wrote:
| > And the title says "platform". So I'm still confused.
|
| I hate it when people say "platform" or use other vague/ill
| defined terms. Just say it's a JS implementation of Python that
| evaluates code in script tags for python, or some such.
| pphysch wrote:
| PyScript is a platform for using Python in the browser to
| build actual applications.
| amanzi wrote:
| I used this to create a Markdown renderer a while back. You can
| see the very simple source code here:
| https://pyscript.com/@stuartmaxwell/markdown-previewer-v2/la...
|
| The app won't run well on mobile but should be fine on desktop.
|
| I used this code in a blog application I was writing in Django.
| IshKebab wrote:
| The examples were about as slow as I imagined they would be. 20
| seconds to draw a simple graph.
| nmstoker wrote:
| The majority of that is the upfront one-off loading time for
| pyodide to get going along with required packages. Subsequent
| runs for things will be substantially faster.
| IshKebab wrote:
| That _is_ a subsequent run (because I also wondered if
| caching etc would improve hot loads, but it doesn 't).
| bArray wrote:
| I've been looking for something like this, but I'm still unsure
| it quite hits the spot. I think that this would be very
| interesting if it allows a person to run a blog like a Jupyter
| notebook.
|
| I have a lightweight hack [1] that runs Python in markdown
| documents and can output basic images/graphs - which is embedded
| into static pages. The point was being able to write an article
| that somebody else could see the code behind it and test
| themselves, e.g. [2]. One of the browsers I test in is Netsurf
| with JS disabled. Unfortunately it doesn't look great in Lynx.
|
| [1] https://gitlab.com/danbarry16/pandoc-highlight-filter
|
| [2] https://coffeespace.org.uk/projects/langtons-ant-
| universe.ht...
| DerThorsten wrote:
| There is jupyerlite which does exactly that
| https://github.com/jupyterlite/jupyterlite
|
| Kernels are compiled to wasm and can therefore run in the
| browser.
|
| Try it out at:
| https://jupyterlite.readthedocs.io/en/stable/_static/lab/ind...
|
| Its easy to create your own deployments, there is a template
| repo for that https://github.com/jupyterlite/demo
| agumonkey wrote:
| What other language would people choose in a browser? Lua ?
| thesuperbigfrog wrote:
| >> What other language would people choose in a browser? Lua?
|
| Brendan Eich originally wanted to use Scheme. There are some
| Scheme in Javascript implementations:
|
| https://www.biwascheme.org/
|
| https://lips.js.org/
|
| https://www.wescheme.org/
|
| https://web.scheme.org/
| agumonkey wrote:
| Yeah but I was mostly wondering about mainstream programmers.
| The chance of people liking a lisp are still low(to my own
| sadness)
| zygentoma wrote:
| Isn't this the same concept as brython? (BRowser pYTHON)
|
| https://brython.info/
|
| https://github.com/brython-dev/brython
| pansa2 wrote:
| Brython seems to be a Python => JS translator, rather than an
| in-browser Python implementation. Similar end result, but works
| in a completely different way.
|
| https://yasoob.me/2019/05/22/running-python-in-the-browser/
| miohtama wrote:
| AFAIK Brython cannot translate some of popular Python
| libraries. Python libraries, esp. Data science ones, are
| often the reason why developers pick Python.
| nmstoker wrote:
| Yes, this is an advantage of Pyodide, and thus PyScript
| too, they have a fair number of packages that work
| directly:
|
| https://pyodide.org/en/stable/usage/packages-in-
| pyodide.html
| bschwindHN wrote:
| Our phones are getting faster every year, we must find a way to
| slow things down even more.
| poikroequ wrote:
| The dawn of the PyScript web frameworks is upon us...
| amy-petrik-214 wrote:
| We must think of the lessons of docker, the lessons of conda.
| Why, what with the web environments, so many, is there not a
| way to unify an environment? Of course! A virtual environment
| of python, on a virtual environment of the docker machine, on
| a virtual web browser, and there can be JIT throughout to
| make it only painfully slow and not excruciatingly slow!
| Abstraction is a Good Thing (TM) and the more abstraction,
| the better. There really ought to be an object oriented
| abstraction layer factory generator factory using Java OOP
| best practices, also a good thing (TM). If all goes well we
| may even be able to reach abstraction tier 17, which is two
| more layers of abstraction than the industry standard 15.
|
| See: https://www.corporate-rebels.com/blog/cia-field-manual
| failuser wrote:
| Just one more abstraction layer will fix it.
| bouncing wrote:
| I wrote one. https://puepy.dev
| poikroequ wrote:
| You, sir, are a mad man.
| Wowfunhappy wrote:
| I agree with the sentiment but the purpose of WebAssembly is to
| be a compiler target for other languages, so we're not stuck
| with Javascript until the end of time, right? Will this always
| necessarily be substantially slower than Javascript?
| pansa2 wrote:
| > _Will this always necessarily be substantially slower than
| Javascript?_
|
| Yes, interpreted Python will always be slower than JIT-
| compiled JavaScript.
|
| PyPy.js [0] is a JIT compiler for Python that runs in the
| browser - its performance could be similar to JS but its
| development is currently "sleeping".
|
| [0] https://github.com/pypyjs/pypyjs
| pjmlp wrote:
| This is sadly to be expected in regards to PyPy, it was
| never taken seriously by the Python community, regardless
| of their heroic efforts.
| bouncing wrote:
| You're replacing one interpreted language for another.
|
| Yes, Python is among the slower interpreted languages out
| there, but still. The debate between fast execution and
| programmer productivity is not a new one. Given Python's
| popularity, I'd say it's settled.
| v3ss0n wrote:
| I can't find any real world use case there. If you want to run ML
| Models you can build them to Onnx
| https://onnxruntime.ai/docs/tutorials/web/ . Will this efficient
| to build browser based app in place of JS/TS ?
| h8hawk wrote:
| Perhaps some people don't want to touch JS/TS
| mapcars wrote:
| TS is actually has better typing than Python (mypy). And the
| whole React (Vue, etc) infrastructure around it. Without
| these two things I wouldn't even bother writing frontend
| code.
| pphysch wrote:
| The browser doesn't support TS though. The browser does
| support Python via PyScript/pyodide/etc.
|
| You can't run TS in the browser unless you jump through the
| same hoops that PyScript is.
| wiseowise wrote:
| 'npx vite build' is what you call hoops?
| pphysch wrote:
| You can offline transpile anything to JS to later run in
| the browser, TS isn't special in this way.
|
| With PyScript you can see and modify the actual code in
| your browser, just like vanilla JS.
| pjmlp wrote:
| Yet, type annotations are being discussed for JavaScript,
| eventually the browsers will be running Typescript.
| pphysch wrote:
| The browsers are already running _anything_ via custom
| WASM interpreters, like Pyodide for Python.
| pjmlp wrote:
| With a huge performance hit and leaky abstractions.
| infamia wrote:
| I thought I read somewhere that the Chrome team tried
| typed JS, found out that there was a performance hit, and
| they ended the experiment? Is this a continuation of that
| or a new effort? Sounds interesting.
| infamia wrote:
| Idk they're just different tradeoffs to me. Types are real
| and enforceable at runtime in Python (e.g, pydantic). Types
| in TS/JS are a fake veneer that add a build step. Is that
| categorically better? I don't love Python typing syntax.
| mapcars wrote:
| I want my types to be verified before runtime, what
| should I do with type error at runtime? Yes it will leave
| me a better error message in logs, but build-time type
| check will prevent me even rolling this code out.
|
| So yes, its categorically better.
| infamia wrote:
| > I want my types to be verified before runtime, what
| should I do with type error at runtime?
|
| It is weird to me you cannot think of uses for types and
| handling their errors at runtime. Look at projects like
| FastAPI (which uses pydantic) for an an example where
| having types at runtime has been handy.
|
| Also, if types are enforced at runtime logging is better,
| debugging is better, and you have more options for data
| validation and doing dynamic or metaprogramming likely
| more easily because you can evaluate these things at
| runtime. By types being built in, the language gives you
| a richer set of tools to work with and more options when
| and how to enforce types.
| quotemstr wrote:
| Programming language ought to be decoupled from deployment
| environment.
| apwheele wrote:
| For folks interested in seeing a usecase, I have a panel
| dashboard of Dallas crime statistics at:
|
| https://crimede-coder.com/graphs/Dallas_Dashboard
|
| Startup takes around a minute (which includes installing various
| python libraries + loading an external 5mb dataset). But once up
| and running it is quite responsive. (And works fine on my
| iphone.)
|
| Many businesses I work with use Tableau free versions, and just
| manually update the data (since the free doesn't allow direct
| connections to a datastore). This is a free alternative (I use
| github actions to build a zipped up csv file that is pulled into
| the environment).
| miohtama wrote:
| Awesome example of using in production! Nice work.
|
| I wish we get over with the loading hickups soon. Do you know
| if there is any work going on to make it start
| faster/smaller/less janky?
| solarexplorer wrote:
| Maybe some kind of snapshot feature, where you can just load
| an snapshot of the already initialized state?
| stackskipton wrote:
| Memory usage seems quite high. According to Browser Task
| Manager, the tab is consuming 657MB compared to 25-70MB most
| other tabs are using.
| apwheele wrote:
| Yes this is part of the price of running it client side
| instead of having a server do all the data manipulation. It
| is pretty much a wash for RAM for me vs running locally
| (local is 200-300 for python + 100-200 for chrome for just
| that web-page).
| bbminner wrote:
| Woah, what browser/page combination can fit into ~50Mb these
| days? I am simply used to the fact that most pages take at
| least 200Mb RAM in task manager.
| rafaelgoncalves wrote:
| did you use the in browser or another external task
| manager? most pages without videos or some kind of gpu
| process uses 20~30 MB here (like hacker news for example).
| andybak wrote:
| > Startup takes around a minute
|
| I wonder what your bottleneck was? It was about 20 seconds for
| me on domestic broadband.
| jeroenhd wrote:
| Based on the temperature of my phone after clicking that
| link, probably CPU or memory.
| shipp02 wrote:
| Does it work on firefox for anyone? The spinner keeps spinning
| on my MacBook Air.
| jerpint wrote:
| I wonder if this could be combined with fastHTML to have a full
| python html rendered client side
| dataguy_ wrote:
| yep. would be nice as well to have LLMs trained on these things
| for fast prototyping
| SillyUsername wrote:
| Someone just invented a whole new level of hell for devs who
| maintain code.
|
| First it was untrained consultants and VB or Delphi (Pascal)
|
| Then came the JS monkeys mixing up plain JS with jQuery and SQL
| injections.
|
| Now it's time for data scientists and pi/sketch users to feel the
| pain of an uncharted domain...
| micahdeath wrote:
| If you could write VB (VB6) in WASM, that would make some
| things so much simpler!!! (I work on a legacy codebase)
| v3ss0n wrote:
| Thats mean you want to embed VB code into Browser Like in
| ActiveX days?
| pjmlp wrote:
| Actually I think Blazor might support class libraries
| written in VB.NET.
| micahdeath wrote:
| They do and it appears to work really well (I have only
| experimented with it.)
| micahdeath wrote:
| Isn't it the same thing as a SPA or any other WASM? The
| only real difference now is that it is now accepted and the
| browsers assist with cross platform APIs (and some
| security) instead of pure Windows APIs. (Ok, so I made it a
| bit more simple than it is, but that is how I see it.)
| nazgulsenpai wrote:
| Oh man that would be so cool. Kinda like the Ruffle Flash
| player!
| pwang wrote:
| Anaconda Code is what you're looking for! It's Python (via
| PyScript) running as an Excel plug-in, that has full access
| to the spreadsheet and can harness a big part of the core
| PyData stack (including matplotlib, sklearn, pandas, etc.)
|
| The whole thing runs via PyScript/WASM, and lives locally
| inside the Excel spreadsheet.
| https://www.anaconda.com/blog/introducing-anaconda-code-
| add-...
| sitkack wrote:
| Arguably, VB6 and Ruby have a pretty similar syntax. And Wasm
| is first class in the Ruby build farm.
| https://github.com/ruby/ruby.wasm
| v3ss0n wrote:
| Thats what I am thinking too. Integrating code of DS/ML people
| into backend is painful enonugh. Imagine maintaining frontend
| code of those who had never done proper forntend development...
| bob020202 wrote:
| If it's not something that needs extensive testing, I'd
| rather maintain that codebase than a "proper" one. Data
| science people don't pump out 100 files with 20 layers of
| OOP, and they don't know how to use Redux or whatever
| overkill navigation lib. It'll be a main.py that just does
| what you want. Maybe there will be copy-pasted code, but even
| that can be more readable sometimes.
| giancarlostoro wrote:
| Honestly, WebAssembly with C#'s Blazor is the best development
| experience I've ever had. I can fully debug the front-end and
| back-end within Visual Studio.
| maleldil wrote:
| But then you have to use Visual Studio.
| camdenreslink wrote:
| Visual Studio is really good if you are doing C#
| development on Windows.
| giancarlostoro wrote:
| MonoDevelop was also really nice. So much so, it looks
| like they copied it into Visual Studio for Mac???[0]
|
| In any regard, C# has some of the richest tooling I've
| seen for any programming language, I do wish Microsoft
| would invest even marginally into MonoDevelop again.
|
| [0]: https://www.monodevelop.com/
| neonsunset wrote:
| VS4Mac _is_ MonoDevelop. Well, it was - VS4Mac is dead
| now as it has been stagnating, and at the end of its life
| was likely more harmful to .NET adoption by developers
| using macOS.
|
| Its niche is now replaced by VS Code, particularly after
| base C# extension switched to Roslyn LSP from Omnisharp,
| and, of course, Rider which has been a strong cross-
| platform offering for a long time.
|
| With that said, I heard only positive things about
| MonoDevelop back in the day and my impression from the
| feedback is that it was something its authors really put
| care into. I suppose it is part of history now.
|
| On Blazor - both Rider and VS Code support it. Contrary
| to the belief of slowly but surely diminishing group of
| developers that think .NET is still stuck in Windows
| land, there is nothing that ties you to Windows here.
| pjmlp wrote:
| Not really.
|
| The original VS4Mac was Mono Develop.
|
| Afterwards the team started to share code between Visual
| Studio and VS4Mac, written in .NET Standard libraries,
| until they started the full rewrite, using .NET Core
| proper with Cocoa bindings, as the team did not consider
| MAUI with Catalyst mature enough for the rewrite.
|
| Only to have the project cancelled and replaced by our
| Electron shell friend, after they reached the 1.0 of the
| rewrite efforts.
|
| Which still doesn't have the graphical tooling and
| storyboards integration from VS4Mac.
|
| Most folks are rather adopting Rider.
| giancarlostoro wrote:
| One of the best IDE's I've ever used. JetBrains IDE's come
| close, but Visual Studio is a gem.
| maleldil wrote:
| IMO, it's somewhat polarising. Some people love it, but I
| personally can't stand it. It feels too heavy, trying to
| dominate every aspect of writing code. I prefer
| lightweight editors, but I recognise it's a personal
| thing.
| noworriesnate wrote:
| Visual Studio is nice but I vastly prefer Rider, even on
| Windows. It feels bit snappier, especially when you're
| comparing Visual Studio + Resharper versus Rider. TBH
| this is probably a matter of what is familiar though.
| giancarlostoro wrote:
| I use Rider on other platforms.
| pjmlp wrote:
| The 2nd coming of Web Forms, or Silverlight, take your pick.
| giancarlostoro wrote:
| In the case of WASM though, does it really matter? Ideally
| I want to see other languages do the same thing.
| pjmlp wrote:
| It matters when debugging pile of WASM code, and the
| performance loss switching back and forth to JavaScript
| engine.
|
| The very reason I haven't bothered that much with Blazor,
| are my debugging scars from Web Forms and JSF.
|
| Given the choice, I will go with stuff that works
| directly with script tags and the built-in developer
| tools.
| bouncing wrote:
| I'm curious what widgets/frontend tooling you use.
|
| This is, I assume, Visual Studio for Windows. Have you tried
| it at all in VS Code or is that a non-starter?
| pdntspa wrote:
| Everyday We Stray Further From God
| bdcravens wrote:
| Reminds me of my first "tech" job (computer store/ISP/web dev
| shop, circa 1998) where the owner wrote some VBScript for the
| browser and wondered why it didn't work in Netscape.
| pitah1 wrote:
| I recently went down the rabbit hole of using PyScript for
| running a Python CLI app in the browser.
|
| It felt hacky the whole time, especially when dependencies were
| involved. I had to create wrapper classes to work around Pydantic
| 2.x not being available to use. I tried to put all logic into the
| Python files but found some things missing that I had to put in
| JavaScript.
|
| I think it could be good in use cases where you want some simple
| UI with custom UI logic on top of your Python code but maybe
| Streamlit or Gradio could be more suitable.
|
| GitHub repo: https://github.com/data-catering/data-contract-
| playground
|
| Website: https://data-catering.github.io/data-contract-
| playground/
| raybb wrote:
| The big limitation that's very annoying with any WASM setup is
| that at the end of the day you still can't call many APIs or
| scrape sites because of CORS. Ofcourse, CORS is important to
| avoid XSS and the like but I wish there was a way to deal with
| this other than setting up a proxy to strip CORS, which then
| leaves you with a non residential IP that's more likely to get
| blocked.
| deknos wrote:
| What i would like, if i could write scripts in firefox, which act
| the browser, like doing the evaluation at any stage i like. At
| GET the page, after ALL GETs. After javascript evaluation or
| before.
|
| Is there something which can do this? and with full power of
| python also accessible to the host?
| grej wrote:
| Also check out pyscript.com, to create and host PyScript apps.
| Falimonda wrote:
| Does something built off this or Pyodide exist that's effectively
| a replacement to using React?
| bityard wrote:
| Why does it require signing in just to try it out? Someone else
| below mentioned that it's just adding a <script> tag to your
| HTML.
| jedberg wrote:
| First thing I tried was a small lambda function and it worked!
| Then I tried some Fibonacci with tail recursion and surprisingly
| that worked too. I'm impressed, because often when people
| reimplement the Python interpreter they get those wrong.
| tusharsadhwani wrote:
| that's because it's not a reimplementation, it is cpython
| recompiled to wasm.
| pxc wrote:
| > Then I tried some Fibonacci with tail recursion and
| surprisingly that worked too. I'm impressed, because often when
| people reimplement the Python interpreter they get those wrong.
|
| Huh? I thought Python didn't have TCO anyway. Guido had a whole
| blog post about why it supposedly doesn't belong in Python:
| https://neopythonic.blogspot.com/2009/04/tail-recursion-elim...
| nickpsecurity wrote:
| For those exploring, here was one of the best "Python in the
| browser" projects I found:
|
| https://brython.info/
| n8henrie wrote:
| I tried to write a POC Firefox extension in pyscript but ended up
| having to fall back to pyodide. Was a fun experiment anyway.
|
| https://n8henrie.com/2023/06/write-a-firefox-extension-in-py...
| apples2apples wrote:
| Careful Anaconda will change the license on you and then sue...
| pwang wrote:
| Fun joke but Anaconda has a track record of creating OSS and
| then turning it over to community governance. This includes the
| conda tool itself, libraries like bokeh, dask, numba,
| jupyterlab, and many more. And while PyScript project
| governance isn't in NumFOCUS, all of the code is permissively-
| licensed BSD/MIT.
|
| The commercial licenses for the products and commercial
| repository is what supports all of this OSS development work.
| bouncing wrote:
| If I may toot my own horn, I wrote a somewhat more opinionated,
| reactive, frontend framework using PyScript. It's inspired by
| Vue.js, a bit: https://puepy.dev
| bilsbie wrote:
| How's it work? Webassembly? Webile?
___________________________________________________________________
(page generated 2024-08-16 23:00 UTC)