内容提要
PEP 776 旨在为 Python 3.14 增加对 Emscripten 的支持,允许 Pyodide wheels 上传至 PyPI。该提案强调 Emscripten 平台的重要性,目标是将 Pyodide 的运行时功能整合进 CPython,并解决动态库加载和信号支持等技术挑战。
关键要点
-
PEP 776 旨在为 Python 3.14 增加对 Emscripten 的支持,允许 Pyodide wheels 上传至 PyPI。
-
Emscripten 是一个开源编译工具链,将 C/C++ 代码编译为 WebAssembly/JavaScript 可执行文件。
-
Pyodide 项目自 2018 年以来支持 Emscripten Python,已帮助数十万学生学习 Python。
-
该提案的长期目标是将整个 Pyodide 运行时整合进 CPython,但当前 PEP 仅建立基础。
-
Emscripten 是一个 POSIX 平台,支持与 Linux 的可移植 C/C++ 代码源兼容性。
-
Pyodide 计划在每个 Python 特性发布中采用新的 ABI,以平衡包维护者的 ABI 稳定性需求与平台的灵活性。
-
Emscripten 的动态库在主线程中只能同步加载最大为 4KB 的库,Pyodide 通过预加载动态库来解决此限制。
-
Emscripten 当前不支持 RPATH,Pyodide 通过补丁处理动态库依赖关系。
-
Pyodide 维护了 255 个不同的包,包括主要的科学 Python 包,支持在 Emscripten 上构建和测试。
-
未来工作包括改进打包生态系统中的交叉构建标准,以及将 Pyodide 的运行时特性上游到 CPython。
延伸解读
Emscripten 的重要性
Emscripten 是一个将 C/C++ 代码编译为 WebAssembly 的工具链,支持在浏览器和 Node.js 中运行。PEP 776 强调了其在 Python 生态系统中的重要性,尤其是在教育和交互式文档方面。自 2018 年以来,Pyodide 项目已帮助数十万学生学习 Python,显示出 Emscripten 平台的成熟度和广泛应用。
动态库加载的挑战
PEP 776 提到 Emscripten 在主线程中对动态库的加载有严格限制,最大只能同步加载 4KB 的库。这对大型科学计算库如 SciPy 造成了挑战。为了解决这一问题,Pyodide 通过预加载动态库来规避这一限制,确保用户能够顺利使用这些库。
ABI 兼容性问题
Emscripten 的 ABI(应用二进制接口)在版本间没有稳定性保证,这可能导致 Python 包在不同版本间出现加载或运行时错误。为了解决这一问题,Pyodide 计划在每个 Python 特性发布中采用新的 ABI,以平衡包维护者的稳定性需求与平台的灵活性。
延伸问答
PEP 776 的主要目标是什么?
PEP 776 旨在为 Python 3.14 增加对 Emscripten 的支持,允许 Pyodide wheels 上传至 PyPI。
Emscripten 是什么?
Emscripten 是一个开源编译工具链,将 C/C++ 代码编译为 WebAssembly/JavaScript 可执行文件。
Pyodide 如何解决 Emscripten 动态库加载的限制?
Pyodide 通过预加载动态库来解决 Emscripten 在主线程中最大只能同步加载 4KB 动态库的限制。
PEP 776 对包维护者的 ABI 稳定性有什么考虑?
Pyodide 计划在每个 Python 特性发布中采用新的 ABI,以平衡包维护者的 ABI 稳定性需求与平台的灵活性。
Pyodide 目前维护多少个不同的包?
Pyodide 目前维护了 255 个不同的包,包括主要的科学 Python 包。
未来 Pyodide 的工作重点是什么?
未来工作包括改进打包生态系统中的交叉构建标准,以及将 Pyodide 的运行时特性上游到 CPython。