LoginSignup
14
14

More than 5 years have passed since last update.

Webブラウザで稼働するPython環境「Pyodide」を使ってみる

Posted at

Pyodideとは

Pyodide(パイオダイド)とは、Pythonデータサイエンススタックを完全にブラウザ内で動作させるためのMozillaの実験的プロジェクトです。
2019年4月16日にMozillaから「Pyodide」の発表がありました。
https://hacks.mozilla.org/2019/04/pyodide-bringing-the-scientific-python-stack-to-the-browser/

元々は「Iodide(アイオダイド)」というデータサイエンスの処理をすべてブラウザー内で実行可能にするプロジェクトが発表されていますが、JavaScirptでは演算子のオーバーロードなど、数値計算に役立つ多数の機能(データサイエンスライブラリ)に欠けているため、そちらを充実させるのも大事な一方で、Pythonをブラウザー内で実行できるようにしてしまえば早いんじゃないか、ということで生まれたそうです。

導入

今回はDocker版を使うのでDockerが入っていること。

$ git clone https://github.com/iodide-project/pyodide.git
Cloning into 'pyodide'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 4434 (delta 2), reused 2 (delta 1), pack-reused 4421
Receiving objects: 100% (4434/4434), 1.01 MiB | 1.99 MiB/s, done.
Resolving deltas: 100% (2846/2846), done.
$
$ cd pyodide/
$ ./run_docker

  : コンテナ構築

root@d7bd99b9dfa3:/src# make

  : make作業(3時間近くかかりました...)

root@d7bd99b9dfa3:/src# ./bin/pyodide serve
serving from /src/pyodide_build/../build at localhost:8000

これで準備が整いました。

実行

コンテナを起動したホストの8000ポートにアクセスします。
ポートの指定はrun_dockerにあるので、8000から変更したい場合は書き換えて下さい。

http://[コンテナホスト]:8000/console.html

試しにpythonコードを実行してみます。

print("Hello, World!")

image.png

もう少しPythonっぽいものも試してみます。

print([i for i in range(10) if i%2==0])

image.png

numpyで2変数の連立1次方程式を解いてみましょう。

\begin{eqnarray}
\left\{
\begin{array}{l}
2x + 3y = 15 \\
5x + 3y = 6
\end{array} \right.
\end{eqnarray}
import numpy as np

A = np.matrix([[2, 3],
              [5, 3]])
Y = np.matrix([[15], [6]])

print(np.linalg.solve(A,Y)) # x = -3, y = 7

image.png

2次関数 $y = x^2$ をグラフ化してみる。
console.htmlではグラフは描かれなかったので、以下のサイトで実行。
https://alpha.iodide.io/notebooks/300/

import matplotlib.pyplot as plt
x = []
y = []
for i in range(0,10):
  x.append(i)
  y.append(i**2)
plt.plot(x,y)
plt.show()

image.png

requestsは使えないようなので、何が使えるかを確認。

import pkg_resources
for dist in pkg_resources.working_set:
  print(dist.project_name, dist.version)
setuptools 40.0.0
pytz 2018.4
python-dateutil 2.7.2
pyparsing 2.2.0
numpy 1.15.1
matplotlib 2.2.3
kiwisolver 1.0.1
cycler 0.10.0

ふむふむ、なるほど。
データサイエンスに絞られているようですね。

14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14