一个驱动器,用于在emscripten-forge coda环境运行wasm代码,就像正常Python代码一样
项目描述
pyjs-code-runner
一个用于在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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0430e0d9eab8f580b510d673ea43411efcf7d72e8a50a98f5c6e5dd25a0f5847 |
|
MD5 | ff690bdc4dac1631a08e7543b0198d0d |
|
BLAKE2b-256 | 049a0fdb6cf66c2790695b42275704d383059bdec4336dc87525c62f01a9df52 |
关闭
pyjs_code_runner-3.0.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1a85fc04a26a011c92014b8b9c106188a66c4c8bf05b2f94047a009da19c20f4 |
|
MD5 | 2eed0f367a64c1b00cdccb3f6a566319 |
|
BLAKE2b-256 | 2026aaa422871c99e1272cbaccb4d6f7170a7323a2cf5d25bebace7c16badd1f |