Heim >Backend-Entwicklung >Python-Tutorial >Führen Sie Python-Programme einfach im Browser aus.

Führen Sie Python-Programme einfach im Browser aus.

DDD
DDDOriginal
2024-12-29 00:05:09981Durchsuche

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:

  1. Problem bei der Dateiübertragung: Wie übergebe ich vom Benutzer ausgewählte Dateien an die Python-Laufzeit im Worker?

  2. 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.

Run Python programs easily in the browser.

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 })
  }
}

Run Python programs easily in the browser.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn