25 พฤษภาคม 2563

Published พฤษภาคม 25, 2563 by with 0 comment

Pyodide: รัน Python บน Web Browser ด้วย WebAssembly 🐍


ปัจจุบัน ต้องยอมรับว่ากระแส WebAssembly มาแรงจริง ๆ หลายภาษาสามารถโยกย้ายไปรันบน WebAssembly ได้ รวมถึงภาษา Python ด้วย


Pyodide เป็นโครงการที่แปลง Python runtime ให้สามารถทำงานบน Web Browser ได้ด้วย WebAssembly พัฒนาโดย Mozilla โดยรวบรวมไลบรารีอย่าง NumPy, Pandas, Matplotlib, NetworkX และไลบรารีอื่น ๆ กว่า 30 ไลบรารีอีกด้วย นอกจากนั้นยังมีจุดเด่น คือ สามารถติดตั้งไลบรารีเสริมจาก PyPI ได้อีกด้วย (ดีกว่าที่คาดไว้) แต่รองรับเฉพาะไลบรารีที่เป็น pure Python เท่านั้น

การใช้งานเบื้องต้น

เราสามารถเรียกใช้งาน Pyodide โดยดึงผ่าน CDN ที่เตรียมไว้มารันกับ javascript ได้ทันที
https://pyodide-cdn2.iodide.io/v0.15.0/full/pyodide.js
ตัวอย่างโค้ดจากเอกสาร Using Pyodide from Javascript
<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript">
        // set the pyodide files URL (packages.json, pyodide.asm.data etc)
        window.languagePluginUrl = 'https://pyodide-cdn2.iodide.io/v0.15.0/full/';
    </script>
    <script src="https://pyodide-cdn2.iodide.io/v0.15.0/full/pyodide.js"></script>
</head>
<body>
  Pyodide test page <br>
  Open your browser console to see pyodide output
  <script type="text/javascript">
        languagePluginLoader.then(function () {
            console.log(pyodide.runPython('import sys\nsys.version'));
            console.log(pyodide.runPython('print(1 + 2)'));
        });
  </script>
</body>


เอาลอง เรามาลองเล่น Pyodide ผ่านหน้า Pyodide terminal emulator 🐍 กัน

เข้าไปที่ https://pyodide-cdn2.iodide.io/v0.15.0/full/console.html เราสามารถเรียกใช้คำสั่ง python พื้นฐานได้เกือบทั้งหมด น่าจะเพียงพอต่อการรันโค้ดพื้นฐาน
จะเห็นได้ว่า Pyodide สามารถรันโค้ด Python ได้แบบสบาย ๆ บน Web Browser ผ่าน WebAssembly ไม่รู้สึกถึงความช้ามากนัก

ต่อไปเรามาลองติดตั้งไลบรารีจาก pypi ลง Pyodide กัน โดยใช้คำสั่ง
import micropip
micropip.install('ชื่อไลบรารีหรือลิงก์ไฟล์ whl')

ตัดคำ PyThaiNLP บน Web Browser

เรามาลองไลบรารีตัวจริงอย่าง PyThaiNLP เพื่อตัดคำภาษาไทยกัน
import micropip
micropip.install('pythainlp')

ผลลัพธ์
 จะพบว่าการติดตั้ง PyThaiNLP ลง Pyodide แบบนี้จะมีปัญหาเพราะมีบางไลบรารีที่ pythainlp ใช้ ไม่ได้เป็น pure Python เหตุนี้ Pyodide ติดตั้งไลบรารีจาก pypi ที่ไม่ใช่ pure Python ไม่ได้ แต่ปัญหานี้ถูกแก้ไขไปแล้วใน PyThaiNLP 2.2 ที่กำลังพัฒนา สามารถติดตั้งได้โดยใช้โค้ดดังนี้
import micropip
micropip.install('tinydb')
micropip.install('requests')
micropip.install('https://files.pythonhosted.org/packages/3a/b3/4127905c4f7457abb018a0f4cb26130a59f937b3a1925cb0d171c18ab153/pythainlp-2.2.0.dev1-py3-none-any.whl')

ผลลัพธ์
ถ้าขึ้น Installed ถือว่าติดตั้งสำเร็จ ต่อไปเรามาลองตัดคำภาษาไทยด้วย PyThaiNLP ผ่าน Browser ด้วย WebAssembly กัน
from pythainlp.tokenize import word_tokenize
text = "เรามาลองทดสอบอะไรเล่นกัน"
word_tokenize(text)

ผลลัพธ์

รัน NumPy บน Web Browser

เราสามารถเรียกใช้งาน NumPy จาก Pyodide ได้ทันทีโดยไม่ต้องติดตั้งเอง ใช้คำสั่ง
pyodide.loadPackage(['numpy'])
ทดสอบการใช้งาน
import numpy as np
np.array([1, 2, 3, 4, 5])
print(np.__version__)
ผลลัพธ์
  
นอกจากนั้น สามารถเข้าไปดูไลบรารีที่ Pyodide รองรับได้ที่ https://github.com/iodide-project/pyodide/tree/master/packages

อ่านเอกสารการใช้งาน Pyodide ได้ที่ https://github.com/iodide-project/pyodide

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)