Rumah >pembangunan bahagian belakang >Tutorial Python >Jalankan program Python dengan mudah dalam penyemak imbas.

Jalankan program Python dengan mudah dalam penyemak imbas.

DDD
DDDasal
2024-12-29 00:05:09990semak imbas

Microsoft sumber terbuka MarkItDown baru-baru ini, program yang menukar fail Office kepada format Markdown. Projek ini dengan cepat naik ke senarai sohor kini GitHub selepas dikeluarkan.

Namun, memandangkan MarkItDown ialah program Python, ia mungkin mencabar untuk digunakan oleh pengguna bukan teknikal. Untuk menangani isu ini, saya terfikir untuk menggunakan teknologi WebAssembly untuk menjalankan kod Python terus dalam penyemak imbas.

Pyodide ialah program sumber terbuka yang menjalankan Python dalam penyemak imbas, menggunakan WebAssembly untuk mengalihkan CPython, jadi ia menyokong semua sintaks Python. Cloudflare's Python Workers juga menggunakan Pyodide.

Pyodide ialah pelabuhan CPython ke WebAssembly/Emscripten.

Pyodide memungkinkan untuk memasang dan menjalankan pakej Python dalam penyemak imbas menggunakan mikropip. Sebarang pakej Python tulen dengan roda yang tersedia pada PyPI disokong.

Banyak pakej dengan sambungan C juga telah dialihkan untuk digunakan dengan Pyodide. Ini termasuk pakej biasa seperti regex, PyYAML, lxml, dan pakej Python saintifik termasuk NumPy, panda, SciPy, Matplotlib dan scikit-learn. Pyodide dilengkapi dengan antara muka fungsi asing JavaScript ⟺ Python yang teguh yang membolehkan anda mencampurkan bahasa ini secara bebas dalam kod anda dengan geseran yang minimum. Ini termasuk sokongan menyeluruh untuk pengendalian ralat, async/menunggu dan banyak lagi.

Apabila digunakan dalam penyemak imbas, Python mempunyai akses penuh kepada API Web.

Cuba menjalankan MarkItDown adalah sangat lancar, membuktikan bahawa WebAssembly benar-benar masa depan pelayar.

Cabaran utama yang dihadapi dan penyelesaian:

  1. Isu Pemindahan Fail: Bagaimana untuk menghantar fail yang dipilih pengguna ke masa jalan Python dalam Worker?

  2. Isu Pemasangan Ketergantungan: Akses terhad kepada PyPI di tanah besar China.

Akhirnya, kami berjaya melaksanakan alat MarkItDown yang berjalan sepenuhnya dalam penyemak imbas. Jangan ragu untuk mencubanya di Office File to Markdown.

Run Python programs easily in the browser.

Berikut ialah kod teras untuk menjalankan Python dalam 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.

Atas ialah kandungan terperinci Jalankan program Python dengan mudah dalam penyemak imbas.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn