跳转到主要内容

一个驱动器,用于在emscripten-forge coda环境运行wasm代码,就像正常Python代码一样

项目描述

pyjs-code-runner

CI

一个用于在wasm环境中运行Python代码的驱动器,几乎就像运行纯Python代码一样。

动机

在浏览器环境中从专用conda环境调试、实验和测试Python代码是一个复杂的过程,需要很多(复杂的)步骤。

  • 为emscripten创建环境
  • 打包环境

安装

目前pyjs-code-runner不在PyPI上。要安装它,克隆仓库并使用pip安装。

我们首先建议为pyjs-code-runner创建一个新的conda环境。

mamba create -n pyjs-code-runner -c conda-forge python
mamba activate pyjs-code-runner

然后安装pyjs-code-runner

git clone https://github.com/emscripten-forge/pyjs-code-runner
cd pyjs-code-runner
python -m pip install -e .

然后安装用于Playwright的浏览器

playwright install

然后,您需要为在浏览器中运行的代码创建另一个conda环境。这里我们指定了emscripten-forge通道和emscripten-32平台。

mamba create -n my_env -c https://repo.mamba.pm/emscripten-forge -c https://repo.mamba.pm/conda-forge --platform=emscripten-32 python numpy pyjs

根据您想运行的代码,您可能需要向此环境添加更多依赖项。

使用方法

在此,我们假设有一个文件 main.py,位于 ~/foo/bar/main.py,其内容如下

import numpy as np

print("Hello from pyjs-code-runner")
print("numpy version:", np.__version__)

然后,您可以使用以下命令在浏览器中运行此代码

# run in browser-main-thread backend
pyjs_code_runner run script                                                                \
    browser-main                                                                           \
    --conda-env     ~/micromamba/envs/my_env         `# the emscripten-forge env`          \
                                                     `# in which to run the code`          \
                                                                                           \
    --mount         ~/foo/bar:/home/web_user/fubar   `# Mount path to virtual filesytem`   \
                                                     `# <HOST_MACHINE_PATH>:<TARGET_PATH>` \
                                                                                           \
    --script        main.py                          `# Path of the script to run`         \
                                                     `# (in virtual filesystem)`           \
                                                                                           \
    --work-dir      /home/web_user/fubar             `# Work directory `                   \
                                                     `#in the virtual fileystem`           \
                                                                                           \
    --async-main                                     `# should a top-level async`          \
                                                     `# function named main be called`     \
    --headless

--headless 标志将在无头模式下运行浏览器。如果您想在您的机器上看到浏览器打开,可以移除此标志。

运行此命令后,您将在以下终端中看到代码的输出

Failed to load resource: the server responded with a status of 404 (File not found)
fetching python package from ./python-3.10.2-h_hash_26_cpython.tar.gz
fetching pkg numpy from ./numpy-1.24.2-py310h6d2fff6_0.tar.gz
fetching pkg pip from ./pip-23.1-pyhd8ed1ab_0.tar.gz
fetching pkg setuptools from ./setuptools-63.4.2-py310h8bed8af_0.tar.gz
fetching pkg wheel from ./wheel-0.40.0-pyhd8ed1ab_0.tar.gz
fetching pkg pyparsing from ./pyparsing-3.0.9-pyhd8ed1ab_0.tar.gz
fetching pkg pyjs from ./pyjs-1.0.0-hc96583f_0.tar.gz
fetching pkg emscripten-abi from ./emscripten-abi-3.1.27-hb0f4dca_5.tar.gz
extract /package_tarballs/setuptools-63.4.2-py310h8bed8af_0.tar.gz (304 bytes)
extract /package_tarballs/wheel-0.40.0-pyhd8ed1ab_0.tar.gz (51524 bytes)
extract /package_tarballs/pyparsing-3.0.9-pyhd8ed1ab_0.tar.gz (90256 bytes)
extract /package_tarballs/pyjs-1.0.0-hc96583f_0.tar.gz (283 bytes)
extract /package_tarballs/emscripten-abi-3.1.27-hb0f4dca_5.tar.gz (302 bytes)
extract /package_tarballs/pip-23.1-pyhd8ed1ab_0.tar.gz (1319563 bytes)
extract /package_tarballs/python-3.10.2-h_hash_26_cpython.tar.gz (2279530 bytes)
extract /package_tarballs/numpy-1.24.2-py310h6d2fff6_0.tar.gz (3594626 bytes)
Hello from pyjs-code-runner
numpy version: 1.24.2

还有其他运行代码的方法,例如在工作线程中

# run in browser-worker-thread backend
# in a headless fashion
pyjs_code_runner run script \
    browser-worker \
    --conda-env     ~/micromamba/envs/my_env \
    --mount         ~/foo/bar:/home/web_user/fubar \
    --script        main.py \
    --work-dir      /tests \
    --async-main           \
    --headless

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

pyjs_code_runner-3.0.0.tar.gz (15.1 kB 查看哈希值)

上传时间

构建分布

pyjs_code_runner-3.0.0-py2.py3-none-any.whl (21.3 kB 查看哈希值)

上传时间 Python 2 Python 3

由支持