Microsoft는 최근 Office 파일을 Markdown 형식으로 변환하는 프로그램인 MarkItDown을 오픈 소스로 공개했습니다. 이 프로젝트는 출시되자마자 GitHub의 인기 목록에 빠르게 올랐습니다.
그러나 MarkItDown은 Python 프로그램이므로 기술적인 지식이 없는 사용자가 사용하기 어려울 수 있습니다. 이 문제를 해결하기 위해 WebAssembly 기술을 사용하여 브라우저에서 Python 코드를 직접 실행하는 방법을 생각했습니다.
Pyodide는 WebAssembly를 사용하여 CPython을 포팅하고 브라우저에서 Python을 실행하는 오픈 소스 프로그램이므로 모든 Python 구문을 지원합니다. Cloudflare의 Python 작업자도 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가 진정한 브라우저의 미래임을 입증했습니다.
당면한 주요 과제와 해결 방법:
파일 전송 문제: 사용자가 선택한 파일을 Worker의 Python 런타임에 전달하는 방법은 무엇입니까?
종속성 설치 문제: 중국 본토에서 PyPI에 대한 액세스가 제한됩니다.
결국 우리는 브라우저에서 완전히 실행되는 MarkItDown 도구를 성공적으로 구현했습니다. Office File to Markdown에서 자유롭게 사용해 보세요.
Worker에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!