Annoncé lors de la conférence PyCon US 2022 organisée du 27 avril au 3 mai par l’éditeur de la distribution Python pour l'informatique scientifique Anaconda, le projet PyScript permet d’exécuter des scripts Python dans des pages HTML aussi facilement que JavaScript lui-même. Traditionnellement, Python ne pouvait interagir avec JavaScript ou une page Web qu'en s'exécutant comme un serveur d'application qui renvoyait du HTML et du JavaScript. L’intérêt de PyScript, c’est qu’il n'a pas de composant serveur, puisque tout s'exécute directement dans le navigateur. Grâce à PyScript, des composants utiles provenant à la fois des mondes Python et JavaScript peuvent être déployés côte à côte. Pour la démo sur les données des taxis de New York réalisée lors de la conférence, PyScript a utilisé Pandas pour analyser les données, puis généré une vue 3D interactive des données via WebGL de JavaScript.

PyScript utilise un port complet du runtime CPython vers WebAssembly pour exécuter du code Python en ligne. Il suffit de placer le code dans les balises et de placer la sortie dans un sélectionné. Ensuite, une balise insère un bloc REPL afin de pouvoir saisir et exécuter du code, et une balise fonctionne comme le fichier requirements.txt dans un référentiel pour répertorier les paquets nécessaires. Le runtime PyScript active également de nombreux paquets Python courants, notamment des bibliothèques scientifiques comme NumPy, Pandas, Scikit-learn et bien d'autres fournies avec Anaconda. Les démos du référentiel PyScript montrent différentes façons de procéder.

Faire interagir Python et JavaScript

Même si PyScript n’en est qu’à ses débuts, il permet déjà à Python et JavaScript d'interagir entre eux, pour que Python fasse référence au DOM, par exemple, ou pour que les objets JavaScript adressent des objets Python. PyScript offre également dans le navigateur des équivalents de nombreux comportements nécessaires à une distribution Python, par exemple le listage des exigences de paquet pour un script.

Des projets antérieurs, comme Pyodide (que PyScript utilise comme base pour son propre fonctionnement), n’offraient par d'intégration fluide comme le fait PyScript entre JavaScript et Python, pas plus qu’un large accès aux paquets. PyScript a accès à tous les paquets disponibles via PyPI, notamment aux paquets Pandas et NumPy couramment utilisés, déjà disponibles. Á noter cependant que les paquets tiers fonctionnent mieux s'ils sont écrits en Python pur. Même si c'est théoriquement possible, PyScript ne contient pas encore de mécanisme pour créer automatiquement des binaires de plate-forme pour les paquets. Le temps et la bande passante qu’il faut pour télécharger et configurer tous les composants nécessaires pour une page Web compatible PyScript donnée constituent un autre obstacle. Le runtime Python principal est équivalent à une binaire WebAssembly (wasm) de 3,4 Mo, bien qu'il soit mis en cache après le premier chargement.

Répondre à l'enjeu d'empaquetage et de déploiement d'applications Python

L'objectif d'Anaconda pour PyScript, tel que décrit dans un message du forum communautaire, est d'en faire une solution possible au problème de longue date de l'empaquetage et du déploiement d'applications Python. Il a en effet longtemps été difficile de prendre un script Python, en particulier un avec de nombreuses dépendances, et de le regrouper pour que quelqu'un d'autre l'utilise tel quel sans le runtime Python.