소개

python을 html에서 구동하게 해주는, PyScript에 대하여 간략하게 알아봅니다.

PyScript 란?

  • python을 html에서 그대로 구동하게 하는것, 즉 javascript처럼 구동 가능하다.
  • PyCon US (2022-04-27 ~ 2022-05-03) 에서, 발표(alpha 버전)되었다.
    • 현재(2022-06) 발표된 버전(alpha)이고, 공식 페이지에서도 상업용 사이트에서의 사용은 주의하라고 되어 있다.

      pyscript f0

hello world

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />

    <title>PyScript Hello World</title>

    <link rel="icon" type="image/png" href="favicon.png" />
    <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />

    <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
  </head>

  <body>
    Hello world! <br>
    This is the current date and time, as computed by Python:
    <py-script>
        from datetime import datetime
        now = datetime.now()
        now.strftime("%m/%d/%Y, %H:%M:%S")
    </py-script>
  </body>
</html>
  • ref: https://github.com/pyscript/pyscript/blob/main/examples/hello_world.html
  • 위 코드를 생성하여 실제 구동해보면, javascripg처럼 실제 구동되어서 화면에 날자가 프린트 되는걸 확인 할 수 있다.
  • 코드를 분석해보면, pyscript.js 파일을 로드하고 있음을 알 수 있다. 해당 파일이 py-script을 구동하게 해준다.
code and result 보기

PyScript simple architecture

pyscript가 나오게된 배경

  • javascript는 client언어로 시작하여, server언어(node.js)로 확장되었다.
  • 그렇다면 server언어인 pyhton은 반대로 client언어(PyScript)로 확장 할 수 있지 않을까?
    • 이러한 요구(잠재적 고객들 === python을 사용하는 개발자)가 있었다.
    • 기술의 발전(사실상 webassemble 발전)으로 가능하게 됨. === PyScript

pyscript의 의미

  • python의 생태계(수많은 library, component 등등) 이 → web 생태계로, web생태계의 확장
  • anaconda 팀에서 말하길
    • PyScript(Pyhton)을 활용하여 FE개발자가 web application을 만들수 있게 될꺼다.
    • 데이터 과학자 입장에서 html file을 이용하여, dashboard와 models을 공유하고, browser을 통해서 구동 할 수 있게 한다.

pyscript f1

Figuare 1. PyScript overview (ref: https://anaconda.cloud/api/files/de4b3735-17cf-4165-9dff-75102dbbd240)

pyscript는 어떻게 구동되는가?

pyscript f2

Figure 2. PyScript Tech Stack. (ref: https://anaconda.cloud/api/files/31ea07ba-dadc-4d18-b79e-d309328762d0)

  • Pyodide 라고 불리는 webassembly 로 구성된 pyton용 wasm을 통해서 구동된다.
  • 즉 webassembly을 이용하여 구동된다. 따라서 각 browser vendor가 javascript engine와 같은 어떤 별도의 python engine을 browser에 가지고 있지 않아도 구동된다! (일단 현재는…)
    • 개인적으로는 만약 python 개발자의 유입이 많아지면 사실상 native(browser) 에서 직접 제공도 할 수 있다고 생각한다. (그럼 javascript + python 투트랙?!? ← 먼훗날 확인하기로)
  • webassembly가 1.0을 발표(2019.12)하고, 약 2년만에 이렇게, python이 구동가능할 정도로 발전하다니 정말 놀랍다.
    • 이런식이라면, 정말로, webassermbly는 다른 언어들, 특히나 script형 function형 언어들의 porting을 기대해볼만 할듯 하다.

PyScript Example

pyscript의 주요 구성 요소

그외 핵심요소

  • Python ecosystem: 유명하고, 유용한 아주 많은 Python 패키지를 사용할 수 있다. (such as numpy, pandas, scikit-learn, and more)
  • Python with JavaScript: Javascript와 Python양방향으로 객체(objects)와 namespaces에 접근하고 통신(사용) 할 수 있다.(이 부분의 deep한 기술 내용은 Pyodied의 js ↔ python간 사용 관련 문서를 참고)
  • Environment management: 사용자가 사용하고자하는 python패키지를 정의하고 관리할 수 있다.(py-env)
  • Visual application development: 버튼, 컨테이너, 텍스트박스 등 즉시 사용가능한 UI요소를 제공하고 있다.

정리

  • PyScript 는 python을 on browser에서 구동하게 해준다. (PyScript brings Python to the browser.)
  • Browser에서 python엔진을 제공하는건 아니고 webassembly기술을 활용하여 제공되고 있다.
  • 이제 alpha version으로 시작이지만, python의 미래이자 web기술(생태계)의 확장이다. (아직 tensorflow등은 구동 안된다고 한다…)
  • web(FE) 개발자라면 매우 관심있게 지켜볼 주제라고 본다.(python 도 공부해서 같이 쓰자~)

참고