lang:python:wasm
Différences
Ci-dessous, les différences entre deux révisions de la page.
lang:python:wasm [2021/01/01 19:07] – Création root | lang:python:wasm [2021/01/02 09:19] (Version actuelle) – [Exemple d'application] : mise à jour du code html/javascript root | ||
---|---|---|---|
Ligne 48: | Ligne 48: | ||
Exemple complet : | Exemple complet : | ||
+ | |||
+ | <file javascript load_python.js> | ||
+ | function loadPyModule(module, | ||
+ | xmlHttp = new XMLHttpRequest(); | ||
+ | xmlHttp.open( ' | ||
+ | xmlHttp.overrideMimeType(" | ||
+ | |||
+ | xmlHttp.onload = function() { | ||
+ | document.source = this.responseText | ||
+ | document.module = module | ||
+ | // Enregistre le fichier dans le système de fichier du runtime Python. | ||
+ | pyodide.runPython(` | ||
+ | import js | ||
+ | |||
+ | import sys | ||
+ | sys.path.insert(0, | ||
+ | |||
+ | print (" | ||
+ | |||
+ | with open(js.document.module + " | ||
+ | fd.write(js.document.source) | ||
+ | `); | ||
+ | |||
+ | // Nécessaire pour le moment. | ||
+ | // Je n' | ||
+ | pyodide.runPython(` | ||
+ | import ` + module + ` | ||
+ | `); | ||
+ | callback(); | ||
+ | } | ||
+ | |||
+ | xmlHttp.send('' | ||
+ | } | ||
+ | |||
+ | function loadPyModules(modules, | ||
+ | if (Object.is(modules.length - 1, i)) { | ||
+ | loadPyModule(modules[i], | ||
+ | } else { | ||
+ | loadPyModule(modules[i], | ||
+ | callback(modules[i]) | ||
+ | loadPyModules(modules, | ||
+ | }) | ||
+ | } | ||
+ | } | ||
+ | </ | ||
<file html5 index.html> | <file html5 index.html> | ||
Ligne 57: | Ligne 102: | ||
window.languagePluginUrl = '/ | window.languagePluginUrl = '/ | ||
</ | </ | ||
+ | <script type=" | ||
<script src="/ | <script src="/ | ||
</ | </ | ||
- | | + | < |
- | <p id=" | + | |
- | < | + | |
- | document.getElementById(" | + | |
- | // Charge le runtime python | + | |
- | languagePluginLoader.then(() => { | + | |
- | // Charge les dépendences externes | + | |
- | pyodide.loadPackage(' | + | |
- | // Récupère le module angle.py | + | |
- | xmlHttp = new XMLHttpRequest(); | + | |
- | xmlHttp.open( ' | + | |
- | xmlHttp.overrideMimeType(" | + | |
- | // Enregistre le module dans le système local de fichier du navigateur | + | <p id=" |
- | xmlHttp.onreadystatechange | + | |
- | if (this.readyState == 4 && this.status == 200) { | + | |
- | // On enregistre le contenu du fichier angle.py dans une variable JavaScript | + | |
- | document.source = this.responseText | + | |
- | // L' | + | |
- | pyodide.runPython(` | + | |
- | import js | + | |
- | import sys | + | < |
- | sys.path.insert(0, | + | |
- | with open("angle.py", "w" | + | progressBar = document.getElementById("demo" |
- | | + | progressBar.innerHTML = "Start loading python."; |
+ | languagePluginLoader.then(() => { | ||
+ | progressBar.innerHTML = " | ||
+ | pyodide.loadPackage([' | ||
+ | progressBar.innerHTML = "numpy loaded. Loading scipy package."; | ||
+ | pyodide.loadPackage([' | ||
+ | progressBar.innerHTML = "scipy loaded. Loading python modules."; | ||
+ | loadPyModules([' | ||
+ | | ||
+ | |||
+ | pyodide.runPython(` | ||
+ | print (angle.Angle(3.14, angle.Angle.Unite.RADIAN).get_deg()) | ||
+ | |||
+ | print (compute.get_timestamp_ns()) | ||
`); | `); | ||
- | // On peut alors importer le module angle | + | |
- | pyodide.runPython(`import angle`) | + | }); |
- | | + | }); |
- | } | + | }); |
- | } | + | }); |
- | xmlHttp.send('' | + | </ |
- | }) | + | |
- | }); | + | </ |
- | </ | + | |
- | </ | + | |
</ | </ | ||
</ | </ |
lang/python/wasm.1609524441.txt.gz · Dernière modification : 2021/01/01 19:07 de root