Microsoft hat kürzlich MarkItDown als Open-Source-Software veröffentlicht, ein Programm, das Office-Dateien in das Markdown-Format konvertiert. Das Projekt kletterte nach der Veröffentlichung schnell auf die Trendliste von GitHub.
Da es sich bei MarkItDown jedoch um ein Python-Programm handelt, kann die Verwendung für technisch nicht versierte Benutzer eine Herausforderung darstellen. Um dieses Problem zu beheben, dachte ich darüber nach, die WebAssembly-Technologie zu verwenden, um Python-Code direkt im Browser auszuführen.
Pyodide ist ein Open-Source-Programm, das Python im Browser ausführt und WebAssembly zum Portieren von CPython verwendet, sodass es die gesamte Python-Syntax unterstützt. Die Python-Worker von Cloudflare verwenden ebenfalls Pyodide.
Pyodide ist eine Portierung von CPython auf WebAssembly/Emscripten.
Pyodide ermöglicht die Installation und Ausführung von Python-Paketen im Browser mithilfe von Micropip. Jedes reine Python-Paket mit Rädern, das auf PyPI verfügbar ist, wird unterstützt.
Viele Pakete mit C-Erweiterungen wurden auch für die Verwendung mit Pyodide portiert. Dazu gehören gängige Pakete wie Regex, PyYAML, LXML und wissenschaftliche Python-Pakete wie NumPy, Pandas, SciPy, Matplotlib und Scikit-Learn. Pyodide verfügt über eine robuste JavaScript ⟺ Python-Fremdfunktionsschnittstelle, die es Ihnen ermöglicht, diese Sprachen mit minimaler Reibung frei in Ihrem Code zu mischen. Dazu gehört umfassende Unterstützung für Fehlerbehandlung, Async/Warten und mehr.
Bei Verwendung im Browser hat Python vollen Zugriff auf die Web-APIs.
Der Versuch, MarkItDown auszuführen, verlief überraschend reibungslos und bewies, dass WebAssembly wirklich die Zukunft der Browser ist.
Die wichtigsten Herausforderungen und Lösungen:
Problem bei der Dateiübertragung: Wie übergebe ich vom Benutzer ausgewählte Dateien an die Python-Laufzeit im Worker?
Problem bei der Abhängigkeitsinstallation: Begrenzter Zugriff auf PyPI auf dem chinesischen Festland.
Schließlich haben wir erfolgreich ein MarkItDown-Tool implementiert, das vollständig im Browser läuft. Probieren Sie es gerne bei Office File to Markdown aus.
Hier ist der Kerncode zum Ausführen von Python im 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 }) } }
Das obige ist der detaillierte Inhalt vonFühren Sie Python-Programme einfach im Browser aus.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!