Webアセンブリを使用したブラウザでのPythonの実行
ポストRunning Python in the Browser with Web Assemblyは、Qvaultに最初に現れました.
私たちはQvault’s course curriculumを展開したかったです、そして、最も要求されたプログラミング言語のうちの1つはPythonでした.我々のコースが学生にウェブブラウザでコード権利を書いて、実行するのを許すので、我々は、Pythonインタプリタがウェブアセンブリを使用しているブラウザーで動くのを許す既存のプロジェクトを調べることに決めました.私たちはPyodideというツールに定住しました.
アクションでそれを見るために、finished product, a Python playgroundをチェックしてください.
Pyodideとは
Pyodideは、WebアセンブリにコンパイルされたPythonインタプリタを含むオープンソースプロジェクトです.
WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.
言い換えると、通常、JavaScriptだけがブラウザで実行できますが、ソースコードをWASMにコンパイルすることができれば、ブラウザで任意のプログラミング言語を実行できます.(書いている時点で、私たちはPython、錆を走らせ、私たちのplaygroundに、そして私たちのcoursesにこのように行きます)
Pyodide brings the Python 3.8 runtime to the browser via WebAssembly, along with the Python scientific stack including NumPy, Pandas, Matplotlib, parts of SciPy, and NetworkX. The
packages
directory lists over 35 packages which are currently available.
どうやってやったの?
Pythonの実行プランは、ブラウザでコードを実行する方法とよく似ています.基本的に3つのステップがあります.
どのようにすべての作品を読んでください知っている場合は
Webワーカーズの最初の記事を終えたら、PythonとGoのロジックの違いを理解する必要があるのは、ワーカーファイル自体です.
// pull down pyodide from the public CDN
importScripts('https://pyodide-cdn2.iodide.io/v0.15.0/full/pyodide.js');
addEventListener('message', async (e) => {
// wait for the interpreter to be fully loaded
await languagePluginLoader;
self.runPythonWithStdout = () => {
try {
// execute the code passed to the worker
pyodide.runPython(e.data);
} catch (err){
postMessage({
error: err
});
return;
}
// capture the code's standard output
// and send it back to the main thread
let stdout = pyodide.runPython("sys.stdout.getvalue()")
if (stdout) {
stdout = stdout.split('\n')
for (line of stdout){
postMessage({
message: line
});
}
}
}
// redirect stdout to io.StringIO so that we can get it later
pyodide.runPython(`
import io, code, sys
from js import runPythonWithStdout
sys.stdout = io.StringIO()
sys.stderr = io.StringIO()
## This runs self.runPythonWithStdout defined in the JS
runPythonWithStdout()
`)
postMessage({
done: true
});
}, false);
ご覧の通り、我々のユースケースの唯一の特に挑戦的な部分は、コードの標準的な出力を適切に捕えるために接着剤を加えることでした.進行中の前のGOのウェブ労働者とWASMに関するこの記事。 読書ありがとう!
あなたがどんな質問またはコメントをするならば、さえずりの上で我々について来てください
いくつかの
より多くのプログラミング記事のための我々の会報へのcoding courses on our new platform
Reference
この問題について(Webアセンブリを使用したブラウザでのPythonの実行), 我々は、より多くの情報をここで見つけました https://dev.to/wagslane/running-python-in-the-browser-with-web-assembly-520fテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol