在网络中运行和调试 Python

我们很高兴宣布,已对在网络上运行Python代码进行了实验性支持。要试用,可以安装市场上最新的Experimental - Python for the Web扩展预发布版。这项工作基于目前正在开发中的Python中的WASM。想了解更多其工作原理及进展,可以阅读《编译Python到WebAssembly(WASM)》。

前提条件

使用该扩展需要满足以下前提条件:

  • 你需要安装GitHub Repositories扩展。
  • 你需要用GitHub认证。
  • 你需要使用支持跨源隔离的浏览器。该扩展已在 Microsoft Edge 和 Google Chrome 浏览器中进行了测试。
  • 你需要使用内部版本的 VS Code 进行网页版(例如)https://insiders.vscode.dev/)
  • 你的源代码必须托管在本地文件系统或通过GitHub仓库扩展访问的GitHub仓库中。
  • 启动 VS Code for the Web 时,你需要在 URL 末尾添加以下查询参数:?vscode-coi=.

跑你好世界

下面的截图展示了浏览器中一个简单 Python 程序的执行过程。该程序由两个文件组成app.py以及hello.py存储在本地文件系统中。

存储在本地磁盘上的 Python 代码执行

启动REPL

该扩展自带集成了 Python REPL。要激活它,请执行命令 Python WASM:启动 REPL

Start Python Repl

调试

网页版支持调试 Python 文件,界面与 VS Code 桌面调试相同。目前支持的功能包括:

  • 设置断点
  • 进出功能
  • 跨模块调试
  • 在调试控制台中评估变量
  • 在集成终端中调试程序

下面的截图显示了一个正在进行的调试会话。这些文件直接托管在这个示例仓库的GitHub上。

调试一个 Python 程序

创建您自己的Python环境

该扩展使用基于 CPython WebAssembly 构建的预配置 Python 环境。所用的构建是Python-3.11.0-wasm32-wasi-16.zip.

你可以按照以下步骤创建自己的 Python 环境,包括源轮 Python 包:

  • 创建一个新的GitHub仓库。

  • cpython-wasm-test/releases 下载 wasm-wasi-16 构建,并将其扩展到仓库的根节点。

  • 要添加源轮包,请执行以下作:

    • 创建一个站点包根目录中的文件夹。
    • 使用以下命令安装该包PIP 安装 my_package --target ./site-packages.注意你需要在作系统中安装包括 Pip 的 Python。
  • 提交修改。

  • 更改python.wasm.runtime设置为指向你的GitHub仓库。例如:

    {
      "python.wasm.runtime": "https://github.com/dbaeumer/python-3.11.0"
    }
    

局限性

Python for the Web 支持并不能提供在本地机器上运行源代码时所有可用的功能。Python 解释器的主要局限性有:

  • 没有插槽支持。
  • 没有线程支持。因此,没有异步支持。
  • 没有PIP支持。
  • 不支持原生Python模块。

致谢

没有Python社区的支持,这项工作无法完成,他们正在构建和维护CPython所需的WASM文件。

反馈

如果你在使用 Python for the Web 扩展时遇到问题,可以在 vscode-python-web-wasm 仓库中输入问题。