ホームページ >バックエンド開発 >Python チュートリアル >Python プログラムをブラウザーで簡単に実行します。

Python プログラムをブラウザーで簡単に実行します。

DDD
DDDオリジナル
2024-12-29 00:05:091005ブラウズ

Microsoft は最近、Office ファイルを Markdown 形式に変換するプログラムである MarkItDown をオープンソース化しました。このプロジェクトは、リリースされるとすぐに GitHub のトレンド リストに上がりました。

ただし、MarkItDown は Python プログラムであるため、技術者以外のユーザーにとっては使用が難しい場合があります。この問題に対処するために、WebAssembly テクノロジーを使用して、ブラウザーで Python コードを直接実行することを考えました。

Pyodide はブラウザーで Python を実行するオープンソース プログラムで、WebAssembly を使用して CPython を移植するため、すべての Python 構文をサポートします。 Cloudflare の Python Workers も Pyodide を使用します。

Pyodide は CPython を WebAssembly/Emscripten に移植したものです。

Pyodide を使用すると、micropip を使用してブラウザに Python パッケージをインストールして実行できます。 PyPI で利用可能なホイールを備えた純粋な Python パッケージがサポートされています。

C 拡張子を持つ多くのパッケージも、Pyodide で使用するために移植されています。これらには、regex、PyYAML、lxml などの一般的なパッケージと、NumPy、pandas、SciPy、Matplotlib、scikit-learn などの科学 Python パッケージが含まれます。 Pyodide には、堅牢な JavaScript ⟺ Python 外部関数インターフェイスが付属しており、摩擦を最小限に抑えながらコード内でこれらの言語を自由に組み合わせることができます。これには、エラー処理、非同期/待機などの包括的なサポートが含まれます。

ブラウザで使用すると、Python は Web API に完全にアクセスできます。

MarkItDown を実行してみると驚くほどスムーズで、WebAssembly がまさにブラウザの未来であることが証明されました。

直面する主な課題と解決策:

  1. ファイル転送の問題: ユーザーが選択したファイルをワーカーの Python ランタイムに渡す方法?

  2. 依存関係のインストールの問題: 中国本土では PyPI へのアクセスが制限されています。

最終的に、完全にブラウザ内で実行される MarkItDown ツールの実装に成功しました。 Office File to Markdown でお気軽にお試しください。

Run Python programs easily in the browser.

ワーカーで Python を実行するためのコア コードは次のとおりです。

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

以上がPython プログラムをブラウザーで簡単に実行します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。