python:pyodide

Pyodide - Web ブラウザで動作する Python 環境

ソースコード: GitHub - iodide-project/pyodide: The Python scientific stack, compiled to WebAssembly

Pyodide (パイオダイド) とは Mozilla が開発中の Web ブラウザーの WebAssembly で動作する Python の実装である。
Web ブラウザ上で Python 言語および Python のデータサイエンスライブラリ (NumPy, Scipy, Pandas, Matplotlib… などpyodide/packages を参照) をそのまま使ってプログラミングできるような環境を目指している。
PyodideEmscripten (C/C++ から WebAssembly を生成するコンパイラ) を利用した cpython-emscripten を元に開発されている。

Python Interpreter Loading...


>>> import sys
>>> sys.version
'3.10.2 (main, Sep 25 2022, 05:41:13) [Clang 16.0.0 (https://github.com/llvm/llvm-project a4a29438f451370ed241dde30bfc'
>>> sys.version_info
sys.version_info(major=3, minor=10, micro=2, releaselevel='final', serial=0)
>>> import platform
>>> platform.system()
'Emscripten'
>>> platform.platform()
'Emscripten-3.1.21-wasm32-32bit'
>>>

Releases · iodide-project/pyodide · GitHub より pyodide-0.22.0a1.tar.bz2 をダウンロードして Web サーバーに配置する。

$ curl -LO https://github.com/pyodide/pyodide/releases/download/0.22.0a1/pyodide-0.22.0a1.tar.bz2

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  182M  100  182M    0     0  3010k      0  0:01:02  0:01:02 --:--:-- 2627k

$ mkdir -p ~/dokuwiki/data/media/python/pyodide/
$ tar jxvf pyodide-0.22.0a1.tar.bz2 -C ~/dokuwiki/data/media/python/pyodide/

pyodide/
pyodide/fpcast_test-0.1.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/atomicwrites-1.4.0-py2.py3-none-any.whl
pyodide/Jinja2-3.1.2-py3-none-any.whl
pyodide/pytest-7.1.2-py3-none-any.whl
pyodide/six-1.16.0-py2.py3-none-any.whl
pyodide/pyodide_tblib-1.7.1-py3-none-any.whl
pyodide/MarkupSafe-2.1.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/pluggy-1.0.0-py2.py3-none-any.whl
pyodide/pytz-2022.1-py2.py3-none-any.whl
pyodide/pyparsing-3.0.9-py3-none-any.whl
pyodide/attrs-21.4.0-py2.py3-none-any.whl
pyodide/micropip-0.1.0-py3-none-any.whl
pyodide/iniconfig-1.1.1-py2.py3-none-any.whl
pyodide/sharedlib_test_py-1.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/repodata.json
pyodide/pyodide_py.tar
pyodide/test.html
pyodide/module_test.html
pyodide/webworker.js
pyodide/webworker_dev.js
pyodide/module_webworker_dev.js
pyodide/CLAPACK-3.2.1.zip
pyodide/suitesparse-5.11.0.zip
pyodide/libmagic-5.42.zip
pyodide/numpy-1.22.4-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/pkgconfig-1.5.5-py3-none-any.whl
pyodide/kiwisolver-1.4.3-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/python_dateutil-2.8.2-py2.py3-none-any.whl
pyodide/html5lib-1.1-py2.py3-none-any.whl
pyodide/future-0.18.2-py3-none-any.whl
pyodide/future-tests.tar
pyodide/joblib-tests.tar
pyodide/swiglpk-5.0.2-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/cffi_example-0.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/python_solvespace-3.0.7-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/sqlalchemy-tests.tar
pyodide/cytoolz-tests.tar
pyodide/decorator-5.1.1-py3-none-any.whl
pyodide/jedi-tests.tar
pyodide/pyodide.mjs.map
pyodide/pyodide.mjs
pyodide/tsconfig.tsbuildinfo
pyodide/pyodide.js.map
pyodide/pyodide.js
pyodide/pyodide.asm.data
pyodide/pyodide.asm.wasm
pyodide/pyodide.asm.js
pyodide/pyodide.d.ts
pyodide/package.json
pyodide/console.html
pyodide/openssl-1.1.1n.zip
pyodide/ssl-1.0.0.zip
pyodide/cpp-exceptions-test-0.1.zip
pyodide/sharedlib-test-1.0.zip
pyodide/sqlite3-1.0.0.zip
pyodide/test-1.0.0.zip
pyodide/distutils-1.0.0.zip
pyodide/lzma-1.0.0.zip
pyodide/setuptools-62.6.0-py3-none-any.whl
pyodide/regex-2022.6.2-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/regex-tests.tar
pyodide/py-1.11.0-py2.py3-none-any.whl
pyodide/more_itertools-8.13.0-py3-none-any.whl
pyodide/packaging-21.3-py3-none-any.whl
pyodide/geos-3.10.3.zip
pyodide/libhdf5-1.12.1.zip
pyodide/numpy-tests.tar
pyodide/lxml-4.9.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/nose-1.3.7-py3-none-any.whl
pyodide/tqdm-4.64.0-py2.py3-none-any.whl
pyodide/tomli_w-1.0.0-py3-none-any.whl
pyodide/joblib-1.1.0-py2.py3-none-any.whl
pyodide/docutils-0.18.1-py2.py3-none-any.whl
pyodide/ruamel.yaml-0.17.21-py3-none-any.whl
pyodide/SQLAlchemy-1.4.37-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/cytoolz-0.11.2-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/pyproj-3.3.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/cycler-0.11.0-py3-none-any.whl
pyodide/Brotli-1.0.9-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/uncertainties-3.1.7-py2.py3-none-any.whl
pyodide/uncertainties-tests.tar
pyodide/svgwrite-1.4.2-py3-none-any.whl
pyodide/gmpy2-2.1.2-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/freesasa-2.1.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/pytest_benchmark-3.4.1-py2.py3-none-any.whl
pyodide/python_sat-0.1.7.dev19-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/jedi-0.18.1-py2.py3-none-any.whl
pyodide/cffi-1.15.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/coverage-6.4.4-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/soupsieve-2.3.2.post1-py3-none-any.whl
pyodide/cssselect-1.1.0-py2.py3-none-any.whl
pyodide/pyrsistent-0.18.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/asciitree-0.3.3-py3-none-any.whl
pyodide/xlrd-2.0.1-py2.py3-none-any.whl
pyodide/sympy-1.10.1-py3-none-any.whl
pyodide/Logbook-1.5.3-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/newick-1.3.2-py2.py3-none-any.whl
pyodide/nltk-3.7-py3-none-any.whl
pyodide/nltk-tests.tar
pyodide/pydantic-1.9.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/wrapt-1.14.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/python_magic-0.4.27-py2.py3-none-any.whl
pyodide/demes-0.2.2-py3-none-any.whl
pyodide/cryptography-38.0.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/parso-0.8.3-py2.py3-none-any.whl
pyodide/bcrypt-4.0.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/retrying-1.3.3-py3-none-any.whl
pyodide/bleach-5.0.0-py3-none-any.whl
pyodide/cloudpickle-2.1.0-py3-none-any.whl
pyodide/jsonschema-4.6.0-py3-none-any.whl
pyodide/jsonschema-tests.tar
pyodide/pyclipper-1.3.0.post3-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/pycparser-2.21-py2.py3-none-any.whl
pyodide/beautifulsoup4-4.11.1-py3-none-any.whl
pyodide/beautifulsoup4-tests.tar
pyodide/PyYAML-6.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/toolz-0.11.2-py3-none-any.whl
pyodide/toolz-tests.tar
pyodide/matplotlib_pyodide-0.1.1-py3-none-any.whl
pyodide/msgpack-1.0.4-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/certifi-2022.6.15-py3-none-any.whl
pyodide/fonttools-4.33.3-py3-none-any.whl
pyodide/Pygments-2.12.0-py3-none-any.whl
pyodide/typing_extensions-4.2.0-py3-none-any.whl
pyodide/threadpoolctl-3.1.0-py3-none-any.whl
pyodide/lazy_object_proxy-1.7.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/webencodings-0.5.1-py2.py3-none-any.whl
pyodide/mpmath-1.2.1-py3-none-any.whl
pyodide/mpmath-tests.tar
pyodide/distlib-0.3.4-py2.py3-none-any.whl
pyodide/fonts/
pyodide/fonts/DejaVuSans-Bold.ttf
pyodide/fonts/DejaVuSans-BoldOblique.ttf
pyodide/fonts/DejaVuSans-Oblique.ttf
pyodide/fonts/DejaVuSans.ttf
pyodide/fonts/DejaVuSansDisplay.ttf
pyodide/fonts/DejaVuSansMono-Bold.ttf
pyodide/fonts/DejaVuSansMono-BoldOblique.ttf
pyodide/fonts/DejaVuSansMono-Oblique.ttf
pyodide/fonts/DejaVuSansMono.ttf
pyodide/fonts/DejaVuSerif-Bold.ttf
pyodide/fonts/DejaVuSerif-BoldItalic.ttf
pyodide/fonts/DejaVuSerif-Italic.ttf
pyodide/fonts/DejaVuSerif.ttf
pyodide/fonts/DejaVuSerifDisplay.ttf
pyodide/fonts/Humor-Sans.ttf
pyodide/fonts/LICENSE_DEJAVU
pyodide/fonts/LICENSE_STIX
pyodide/fonts/STIXGeneral.ttf
pyodide/fonts/STIXGeneralBol.ttf
pyodide/fonts/STIXGeneralBolIta.ttf
pyodide/fonts/STIXGeneralItalic.ttf
pyodide/fonts/STIXNonUni.ttf
pyodide/fonts/STIXNonUniBol.ttf
pyodide/fonts/STIXNonUniBolIta.ttf
pyodide/fonts/STIXNonUniIta.ttf
pyodide/fonts/STIXSizFiveSymReg.ttf
pyodide/fonts/STIXSizFourSymBol.ttf
pyodide/fonts/STIXSizFourSymReg.ttf
pyodide/fonts/STIXSizOneSymBol.ttf
pyodide/fonts/STIXSizOneSymReg.ttf
pyodide/fonts/STIXSizThreeSymBol.ttf
pyodide/fonts/STIXSizThreeSymReg.ttf
pyodide/fonts/STIXSizTwoSymBol.ttf
pyodide/fonts/STIXSizTwoSymReg.ttf
pyodide/fonts/cmb10.ttf
pyodide/fonts/cmex10.ttf
pyodide/fonts/cmmi10.ttf
pyodide/fonts/cmr10.ttf
pyodide/fonts/cmss10.ttf
pyodide/fonts/cmsy10.ttf
pyodide/fonts/cmtt10.ttf
pyodide/galpy-1.8.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/numcodecs-tests.tar
pyodide/biopython-1.79-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/rebound-3.19.8-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/cftime-1.6.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/scipy-tests.tar
pyodide/unyt-2.8.0-py2.py3-none-any.whl
pyodide/zarr-2.11.3-py3-none-any.whl
pyodide/imageio-2.19.3-py3-none-any.whl
pyodide/scikit-learn-tests.tar
pyodide/statsmodels-tests.tar
pyodide/PIL-9.1.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/pycryptodome-3.15.0-cp35-abi3-emscripten_3_1_21_wasm32.whl
pyodide/pycryptodome-tests.tar
pyodide/traits-6.3.2-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/traits-tests.tar
pyodide/termcolor-1.1.0-py3-none-any.whl
pyodide/bitarray-2.5.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/bitarray-tests.tar
pyodide/tomli-2.0.1-py3-none-any.whl
pyodide/optlang-1.5.2-py2.py3-none-any.whl
pyodide/optlang-tests.tar
pyodide/sympy-tests.tar
pyodide/numcodecs-0.9.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/yt-4.0.4-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/bokeh-2.4.3-py3-none-any.whl
pyodide/networkx-2.8.4-py3-none-any.whl
pyodide/networkx-tests.tar
pyodide/scipy-1.9.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/colorspacious-1.1.2-py2.py3-none-any.whl
pyodide/unyt-tests.tar
pyodide/zarr-tests.tar
pyodide/scikit_learn-1.1.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/scikit-image-tests.tar
pyodide/scikit_image-0.19.3-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/statsmodels-0.13.2-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/xgboost-1.6.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/cmyt-1.0.4-py3-none-any.whl
pyodide/cmyt-tests.tar
pyodide/matplotlib-3.5.2-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/matplotlib-tests.tar
pyodide/Shapely-1.8.2-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/shapely-tests.tar
pyodide/pandas-1.5.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/pandas-tests.tar
pyodide/mne-1.0.3-py3-none-any.whl
pyodide/mne-tests.tar
pyodide/boost_histogram-1.3.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/RobotRaconteur-0.15.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/msprime-1.2.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/h5py-3.7.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/h5py-tests.tar
pyodide/PyWavelets-1.3.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/pywavelets-tests.tar
pyodide/autograd-1.4-py3-none-any.whl
pyodide/autograd-tests.tar
pyodide/xarray-2022.3.0-py3-none-any.whl
pyodide/xarray-tests.tar
pyodide/astropy-5.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/pyerfa-2.0.0.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/pyerfa-tests.tar
pyodide/patsy-0.5.2-py2.py3-none-any.whl
pyodide/patsy-tests.tar
pyodide/tskit-0.4.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/nlopt-2.7.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/sparseqr-1.2-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/reboundx-3.7.1-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/gsw-3.4.0-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/gsw-tests.tar
pyodide/b2d-0.7.2-cp310-cp310-emscripten_3_1_21_wasm32.whl
pyodide/opencv_python-4.6.0.66-cp310-cp310-emscripten_3_1_21_wasm32.whl

$ mv ~/dokuwiki/data/media/python/pyodide/pyodide/ ~/dokuwiki/data/media/python/pyodide/0.22.0a1

console.html を実行するには修正が必要である。
pyodide_dev.js をロードする前に self.languagePluginUrl の設定が必要である。(これを設定しないと内部のロード処理が全てのファイルが Web サーバーのルートに置かれていると仮定して動作する)

console.html
<!doctype html>
<html>
  <head>
    ...
    <script>
      self.languagePluginUrl = './';
    </script>
    <script src="./pyodide_dev.js"></script>
  </head>
  ...

更に Microsoft Edge で実行可能にするには、以下の修正が必要である。
48~52 行目

pyodide_dev.js
      try {
        dirs = FS.readdir(rootpath);
      } catch (err) {
        return;
      }

} catch {} catch (err) { に修正。

87~92 行目

pyodide_dev.js
      try {
        self.importScripts(url);
        onload();
      } catch (err) {
        onerror();
      }

} catch {} catch (err) { に修正。

  • python/pyodide.txt
  • 最終更新: 2022/10/12 07:15
  • by ともやん