Pyodide#

概要#

  • Pyodide は、ウェブブラウザで実行されるクライアントサイドの Python 実装です

  • PyMuPDF の Pyodide ビルドは現在実験的な段階です。

Pyodide 用の PyMuPDF ホイールの構築#

Pyodide 用の PyMuPDF ホイールは、いくつかの環境変数設定を使用して scripts/gh_release.py を実行することで構築できます。これは、.github/workflows/test_pyodide.yml によって定期的に GitHub 上でテストされています。

以下は、これの例です。現在のディレクトリが PyMuPDF のチェックアウトに設定されている場合に実行される単一の Linux コマンドです。

inputs_sdist=0 \
inputs_PYMUPDF_SETUP_MUPDF_BUILD="git:--recursive --depth 1 --shallow-submodules --branch master https://github.com/ArtifexSoftware/mupdf.git" \
inputs_wheels_default=0 \
inputs_wheels_linux_pyodide=1 \
./scripts/gh_release.py build

これは以下の作業を行います(すべて Python venv 内で実行):

  • Pyodide ビルド環境をダウンロード(git clone および pip install)し、カスタマイズします

  • 最新の MuPDF をダウンロード(git clone)します。

  • MuPDF と PyMuPDF を Pyodide ビルド環境でビルドします。

  • dist/ にホイールを作成します

詳細については、scripts/gh_release.py 内の関数 build_pyodide_wheel()pyodide_setup() のコメントを参照してください。

Pyodide ホイールの使用方法#

  • PyMuPDF/dist/PyMuPDF-1.24.2-cp311-cp311-emscripten_3_1_32_wasm32.whl のようなホイールを、Cross-origin resource sharing(https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)を許可するように構成されたウェブサーバにアップロードします。

  • このホイールは、ウェブブラウザで実行されている Pyodide コンソールまたは JupyterLite ノートブックで使用できます。

  • れらの場合、以下のコードを使用してホイールをダウンロード(url をアップロードされたホイールの URL に置き換える)し、インポートできます:

    import pyodide_js
    await pyodide_js.loadPackage(url)
    import pymupdf
    
    • micropip.install() は PyMuPDF が共有ライブラリを使用しているため機能しないことに注意してください。

PyMuPDF にURLからPDFドキュメントを読み込む#

  • Pyodide ブラウザコンソールには一般的なネットワークアクセスがないため、例えば urllib.request.urlopen(url) は失敗します。しかし、Pyodide には JavaScript を内部で使用する組み込みの pyodide.http モジュールがあります。これを使用して bytes インスタンスにダウンロードし、それを使用して PyMuPDF Document (ドキュメント) インスタンスを作成できます:

    import pyodide.http
    r = await pyodide.http.pyfetch('https://...')
    data = await r.bytes()
    doc = pymupdf.Document(stream=data)
    
  • これは https:// でのみ機能するようです。http:// では機能しません。

This software is provided AS-IS with no warranty, either express or implied. This software is distributed under license and may not be copied, modified or distributed except as expressly authorized under the terms of that license. Refer to licensing information at artifex.com or contact Artifex Software Inc., 39 Mesa Street, Suite 108A, San Francisco CA 94129, United States for further information.