PyScript 란? - HTML에서 파이썬 코드 작성

Tae-Kyun Kim·2022년 5월 8일
8
post-thumbnail

PyScript

  • HTML 에 파이썬을 끼워넣은 시스템
  • 파이썬 코드를 HTML에서 작성하고 동작시킬 수 있고, PyScript에서 Javascript 라이브러리 들을 부르고, 파이썬으로 모든 웹 개발을 할 수 있음
  • 데이터 사이언스 (혹은 머신러닝 엔지니어) 로써 우리의 데시보드나 모델을 HTML 파일로 공유할 수 있고, 웹브라우저에서 열기만 하면 코드를 실행시킬 수 있음
    - streamlit 같은 데모 프레임워크 없이도 웹에서 시연 가능

PyScript의 원리

  • CPython 과 WebAssembly/Emscripten은 포팅해주는 Pyodide로 만들어짐
  • PyScript는 미래에 다른 언어들까지의 지원을 제공할 것

WebAssembly

  • 파이썬으로 웹사이트를 작성할 수 있게 만들어주는 근원적인 기술
  • WebAssembly가 원래 개발될때는, 웹 브라우저는 오직 Javascript만 지원했음
  • 2017년에 처음 release 되고 빠르게 2019년 W3C (World Wide Web Consortium) 표준이 됨
  • 사람이 읽을 수 있는 .wat 텍스트 포멧 언어를 브라우저에서 실행시킬 수 있는 .wasm 바이너리 형식으로 전환
  • 모든 언어에서 코드를 작성할 수 있게 허용해주고, WebAssembly로 컴파일할 수 있게 해주고, web browser에서 동작할 수 있게 해줌!

Get Started

To try PyScript

<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>

PyScript를 시도해보기 위해서는, 적절한 pyscript 파일들이 import된 HTML 페이지를 위 태그와 함께 별도의 환경 구축 없이 작성하면 됨

py-env

파이썬 코드에서 동작하기 위해 필요한 파이썬 패키지들을 정의함

<py-env>
  - bokeh
  - matplotlib
  - pandas
  - scikit-learn
  - path:
  	- ./my-custom-py-module.py
</py-env>
  • 파이썬 표준 라이브러리나 써드파티 OSS 패키지들과 함께 사용하기 위해서는 py-env 태그에 dependency 들을 명시하면 됨
  • 각자가 작성한 파이썬 모듈에 대해서는 다음과 같은 path 아래에 위치에 맞게 작성하면 됨

py-script

웹 페이지에서 실행될 파이썬 코드를 작성

<py-script>
  print('Hello, World!')
</py-script>

<py-script src="./python_file.py"> </py-script>
  • 파이썬 코드를 위처럼 직접 작성하거나, 작성된 py 파일을 불러올 수 있음

py-repl

코드 유저가 입력하고 확인할 수 있는 REPL (read-eval-prin loop) 컴포넌트를 생성

<py-repl>
import numpy as np

print(np.random.randn(10))
</py-repl>

예제:랜덤 플롯 시각화

hello.html

<html>
    <head>
      <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
      <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
      <py-env>
        - numpy
        - paths:
          - ./data.py
      </py-env>
    </head>

  <body>
    <py-script> print('Hello world!') </py-script>
      <h1>Let's plot random numbers</h1>
    <div id="plot"></div>
    <py-script output="plot">
import matplotlib.pyplot as plt
from data import make_x_and_y

x, y = make_x_and_y(n=1000)

fig, ax = plt.subplots()
ax.scatter(x, y)
fig
    </py-script>
  </body>
</html>

data.py

import numpy as np

def make_x_and_y(n):
    x = np.random.randn(n)
    y = np.random.randn(n)
    return x, y

웹페이지

🚧 주의사항

PyScript는 현재 매우 alpha 단계에 있고 많은 알려진 이슈들이 있으며 (로딩 시간 등) PyScript를 활용해 다양한 것을 시도해보기를 권하지만 production 단계에서 사용하는 것을 권장하지 않는다고 합니다.

Reference

[홈페이지] PyScript
[Github] PyScript
[Github] PyScirpt 더 많은 예제
[아나콘다] PyScript 설명

0개의 댓글