Maison >développement back-end >Tutoriel Python >Exécutez facilement des programmes Python dans le navigateur.
Microsoft a récemment open-source MarkItDown, un programme qui convertit les fichiers Office au format Markdown. Le projet a rapidement grimpé sur la liste des tendances de GitHub dès sa sortie.
Cependant, étant donné que MarkItDown est un programme Python, son utilisation peut être difficile pour les utilisateurs non techniques. Pour résoudre ce problème, j'ai pensé à utiliser la technologie WebAssembly pour exécuter du code Python directement dans le navigateur.
Pyodide est un programme open source qui exécute Python dans le navigateur, en utilisant WebAssembly pour porter CPython, il prend donc en charge toute la syntaxe Python. Les Python Workers de Cloudflare utilisent également Pyodide.
Pyodide est un portage de CPython vers WebAssembly/Emscripten.
Pyodide permet d'installer et d'exécuter des packages Python dans le navigateur à l'aide de micropip. Tout package Python pur avec des roues disponibles sur PyPI est pris en charge.
De nombreux packages avec des extensions C ont également été portés pour être utilisés avec Pyodide. Ceux-ci incluent des packages courants tels que regex, PyYAML, lxml et des packages Python scientifiques, notamment NumPy, pandas, SciPy, Matplotlib et scikit-learn. Pyodide est livré avec une interface de fonctions étrangères JavaScript ⟺ Python robuste qui vous permet de mélanger librement ces langages dans votre code avec un minimum de friction. Cela inclut une prise en charge complète de la gestion des erreurs, de l'async/wait, et bien plus encore.
Lorsqu'il est utilisé dans le navigateur, Python a un accès complet aux API Web.
Essayer d'exécuter MarkItDown s'est déroulé d'une manière étonnamment fluide, prouvant que WebAssembly est véritablement l'avenir des navigateurs.
Les principaux défis rencontrés et solutions :
Problème de transfert de fichiers : Comment transmettre les fichiers sélectionnés par l'utilisateur au runtime Python dans Worker ?
Problème d'installation des dépendances : accès limité à PyPI en Chine continentale.
Finalement, nous avons implémenté avec succès un outil MarkItDown qui s'exécute entièrement dans le navigateur. N'hésitez pas à l'essayer sur Office File to Markdown.
Voici le code de base pour exécuter Python dans Worker :
// eslint-disable-next-line no-undef importScripts('https://testingcf.jsdelivr.net/pyodide/v0.26.4/full/pyodide.js') async function loadPyodideAndPackages() { // eslint-disable-next-line no-undef const pyodide = await loadPyodide() globalThis.pyodide = pyodide await pyodide.loadPackage('micropip') const micropip = pyodide.pyimport('micropip') // micropip.set_index_urls([ // 'https://pypi.your.domains/pypi/simple', // ]) await micropip.install('markitdown==0.0.1a2') } const pyodideReadyPromise = loadPyodideAndPackages() globalThis.onmessage = async (event) => { await pyodideReadyPromise const file = event.data try { console.log('file', file) const startTime = Date.now() globalThis.pyodide.FS.writeFile(`/${file.filename}`, file.buffer) await globalThis.pyodide.runPythonAsync(` from markitdown import MarkItDown markitdown = MarkItDown() result = markitdown.convert("/${file.filename}") print(result.text_content) with open("/${file.filename}.md", "w") as file: file.write(result.text_content) `) globalThis.postMessage({ filename: `${file.filename}.md`, content: globalThis.pyodide.FS.readFile(`/${file.filename}.md`, { encoding: 'utf8' }), time: Date.now() - startTime, }) } catch (error) { globalThis.postMessage({ error: error.message || 'convert error', filename: file.filename }) } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!