Pyodide#
概述#
Pyodide 是一个在web浏览器中运行的客户端Python实现。
PyMuPDF的Pyodide构建目前处于实验阶段。
为 Pyodide 构建 PyMuPDF wheel#
可以通过运行 scripts/gh_release.py 并设置一些环境变量来为 Pyodide 构建 PyMuPDF wheel。这在 Github 上通过 .github/workflows/test_pyodide.yml 定期进行测试。
这里是一个示例,一个单一的Linux命令(在当前目录设置为PyMuPDF的检出版本时运行),用于构建Pyodide轮子:
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 克隆和 pip 安装) 并定制 Pyodide 构建环境。
下载 (git clone) 最新的 MuPDF。
在 Pyodide 构建环境中构建 MuPDF 和 PyMuPDF。
在
dist/中创建一个轮子。
有关更多信息,请查看 build_pyodide_wheel() 和 pyodide_setup() 函数在 scripts/gh_release.py 中的注释。
使用 Pyodide wheel#
将轮子上传到一个已经配置为允许跨来源资源共享的web服务器 (https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)。
这个轮子可以在运行在网页浏览器中的Pyodide控制台中使用,或在网页浏览器中运行的JupyterLite笔记本中使用。
要创建一个Pyodide控制台,请转到:
要创建一个 JupyterLite 笔记本,请访问:
https://jupyterlite.readthedocs.io/en/latest/_static/lab/index.html
在这两种情况下,可以使用以下代码下载 wheel (将
url替换为上传的 wheel 的 URL)并导入它:import pyodide_js await pyodide_js.loadPackage(url) import pymupdf
请注意
micropip.install()不起作用,因为 PyMuPDF 使用了共享库。
从 URL 加载 PDF 文档到 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://。