Comme l'explique dans un billet de blog Mike Droettboom, ingénieur data science, il s'agit d'un interpréteur Python standard qui s'exécute entièrement dans le navigateur. Et bien que Pyodide ne soit pas tout à fait nouveau, des projets tels que Transcrypt, Brython, Skulpt et PyPyJs font partie des nombreux efforts visant à intégrer Python aux navigateurs. Il ne nécessite pas de réécriture des outils informatiques scientifiques populaires (tels que NumPy, Pandas, Scipy et Matplotlib) pour atteindre des performances adéquates et sa capacité à convertir les types de données intégrés permet des interactions entre les API de navigateur et les autres bibliothèques JavaScript.
« L'impulsion de Pyodide est venue de notre travail sur un autre projet de Mozilla, Iodide, que nous avons présenté dans un précédent billet. Iodide est un outil d'expérimentation et de communication en science des données basé sur les technologies Web les plus récentes. Notamment, il est conçu pour effectuer des calculs de données informatiques dans le navigateur plutôt que sur un noyau distant.
« Malheureusement, le “langage que nous avons tous” dans le navigateur, JavaScript, n’a pas de suite mature de bibliothèques de science de données et il manque un certain nombre de fonctionnalités utiles pour l’informatique numérique, telles que la surcharge d’opérateurs. Nous pensons toujours qu’il vaut la peine de travailler à changer cela et à faire progresser l’écosystème JavaScript de la science des données. Dans l’intervalle, nous prenons également un raccourci: nous rencontrons les scientifiques de données là où ils se trouvent en apportant la pile scientifique mature et populaire de Python au navigateur.
« Certains ont également fait valoir de manière plus générale que le fait de ne pas utiliser Python dans le navigateur représente une menace existentielle pour la langue. Par conséquent, bien que Pyodide tente de répondre aux besoins d’Iodide en premier lieu, il est également conçu pour être utile ».
Densité d’appels vers le service d’information local «311» de la ville de Oakland, en Californie (l'image d'origine est animée)
Pyodide vous fournit un interpréteur Python standard complet qui s’exécute entièrement dans le navigateur, avec un accès complet aux API Web du navigateur. Dans l’un des exemples fournis (la figure ci-dessus), la densité d’appels vers le service d’information local «311» de la ville de Oakland, en Californie, est tracée en 3D. Le chargement et le traitement des données sont effectués en Python, puis ils passent à Javascript et à WebGL pour le traçage.
Pyodide utilise des wrappers autour d'une variable dans l'autre langage [ce qui est appelé proxy]. Le proxy conserve la variable JavaScript d'origine et appelle des méthodes sur demande. Cela signifie que toute variable JavaScript, quelle que soit sa personnalisation, est entièrement accessible depuis Python et c'est ce niveau d'intégration étroit qui permet à un utilisateur de traiter ses données en Python, puis de les envoyer à JavaScript pour les visualiser.
Pyodide est construit sur WebAssembly, un langage de programmation de bas niveau fonctionnant avec des performances quasi natives, et emscripten (en particulier une version de Python pour emscripten appelée «cpython-emscripten»), qui comprend un compilateur de C et C ++ pour WebAssembly et un couche de compatibilité. Emscripten fournit en outre un système de fichiers virtuel (écrit en JavaScript) que l’interpréteur Python peut utiliser, dans lequel les fichiers disparaissent lorsque l’onglet du navigateur est fermé.
Pyodide est impressionnant, mais Droettboom souligne que c’est encore un travail qui est en développement. Par exemple, des fonctionnalités telles que le threading ne sont pas actuellement prises en charge (mais pourraient l'être à l'avenir avec les threads WebAssembly), tandis que d'autres, telles que les sockets réseau de bas niveau, ne fonctionneront probablement jamais à cause des sandbox de sécurité des navigateurs. En ce qui concerne les performances, l'interpréteur Python de la machine virtuelle JavaScript s'exécute de 1 à 12 fois plus lentement dans Firefox et jusqu'à 16 fois plus lentement dans Chrome - vitesse utilisable pour l'exploration interactive, mais beaucoup plus lente que le code natif.
Pour utiliser Pyodide, vous aurez besoin de l’interpréteur Python compilé en tant que WebAssembly, de JavaScript à partir de emscripten (qui fournit l’émulation système) et d’un système de fichiers contenant les fichiers requis par l’interpréteur Python. Une fois les trois composants téléchargés, ils seront stockés dans la mémoire cache de votre navigateur, évitant ainsi de les télécharger à nouveau.
Selon Droettboom, Pyodide pourra à l'avenir charger la plupart des paquets directement à partir du principal référentiel de communauté de Python, PyPI, ce qui lui donnera accès à environ 59 000 paquets au total.
Source : Mozilla