ホームページ >バックエンド開発 >Python チュートリアル >Python プログラムをブラウザーで簡単に実行します。
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 がまさにブラウザの未来であることが証明されました。
直面する主な課題と解決策:
ファイル転送の問題: ユーザーが選択したファイルをワーカーの Python ランタイムに渡す方法?
依存関係のインストールの問題: 中国本土では PyPI へのアクセスが制限されています。
最終的に、完全にブラウザ内で実行される MarkItDown ツールの実装に成功しました。 Office File to Markdown でお気軽にお試しください。
ワーカーで 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 }) } }
以上がPython プログラムをブラウザーで簡単に実行します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。