Pyodide#
概述#
Pyodide 是一个在网络浏览器中运行的客户端 Python 实现。
PyMuPDF 的 Pyodide 构建目前处于实验阶段。
为 Pyodide 构建 PyMuPDF wheel#
通过运行 scripts/gh_release.py
并设置一些环境变量,可以构建一个适用于 Pyodide 的 PyMuPDF wheel。.github/workflows/test_pyodide.yml
会在 Github 上定期测试此过程。
以下是一个示例,这是一个单行 Linux 命令(需在 PyMuPDF 代码库的当前目录下运行),用于构建 Pyodide wheel
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 虚拟环境中进行)
下载(git clone 并 pip install)并自定义 Pyodide 构建环境。
下载(git clone)最新的 MuPDF。
在 Pyodide 构建环境中构建 MuPDF 和 PyMuPDF。
在
dist/
目录中创建一个 wheel。
更多信息,请参阅 scripts/gh_release.py
文件中函数 build_pyodide_wheel()
和 pyodide_setup()
的注释。
使用 Pyodide wheel#
将 wheel 文件(例如
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)的 Web 服务器上。该 wheel 可用于在 Web 浏览器中运行的 Pyodide 控制台,或在 Web 浏览器中运行的 JupyterLite notebook。
要创建 Pyodide 控制台,请访问
要创建 JupyterLite notebook,请访问
https://lite.jupyter.org.cn/en/latest/_static/lab/index.html
在这两种情况下,都可以使用以下代码下载 wheel(将
url
替换为上传的 wheel 文件的 URL)并导入它import pyodide_js await pyodide_js.loadPackage(url) import pymupdf
请注意,
micropip.install()
不起作用,因为 PyMuPDF 使用了共享库。
将 PDF 文档从 URL 加载到 PyMuPDF 中#
Pyodide 浏览器控制台没有通用的网络访问权限,因此例如
urllib.request.urlopen(url)
会失败。但 Pyodide 有一个内置的pyodide.http
模块,它内部使用 javascript,您可以使用它将内容下载到bytes
实例中,然后可以使用此实例创建 PyMuPDF 的 Document 实例import pyodide.http r = await pyodide.http.pyfetch('https://...') data = await r.bytes() doc = pymupdf.Document(stream=data)
看来这只适用于
https://
,而不适用于http:// 马