쿼카러버의 기술 블로그

파이썬으로 이런것도 가능해?(cross-platform, shell script, 리액트 개발) (pyodide, shellpy, kivy, pythonfire) 본문

[Python]

파이썬으로 이런것도 가능해?(cross-platform, shell script, 리액트 개발) (pyodide, shellpy, kivy, pythonfire)

quokkalover 2022. 1. 1. 00:41

우리는 왜 파이썬을 사용할까? 이런 질문을 받게 되면 나는 주로 아래의 특징들을 떠올리게 된다.

  • 간단한 문법
  • 개발자 친화적(developer-friendly)
  • 인터프리터 언어(interpreted)
  • 풍부한 라이브러리 생태계(rich library ecosystem)
  • 데이터 과학(머신러닝, 엔지니어링) 및 데이터 분석 친화적

지금 회사에서는 파이썬을 사용할 일이 별로 없기 때문에, 주로 사이드 프로젝트에 파이썬을 주로 활용한다.

데이터 분석이나, 간단한 웹 어플리케이션을 개발하는데는 파이썬이 엄청 편리하기 때문이다.

하지만 최근에 어떤 글을 읽게 됐는데, 파이썬을 활용해 정말 다양한 시도를 하는 프로젝트들이 진행되고 있다는 것을 알게됐다

파이썬을 정말 좋아하는 입장에서 매우 흥미로워 공유하고자 글을 적게 됐다.

 

먼저 글을 시작하기전에, 한 가지 질문을 던져보겠다.

파이썬에서 WORA(Write Once Read Anywhere)가 가능할까?

요즘 자바스크립트가 정말 핫해진데는 electron 프레임워크의 기여가 상당히 크다. Electron을 사용하면 개발자들은 데스크톱 앱을 웹 프론트엔드 코드로 구현할 수 있기 때문이다. 쉽게 말하면 코드 하나만 짜면 다양한 플랫폼에서 실행할 수 있는 앱을 만들 수 있는 것이다. Electron뿐만 아니라 자바스크립트가 WORA에 있어서 현재 가장 앞서있는건 부정할 수 없는 사실이다.

하지만! 잊지말자! 현재(2022년)는 파이썬 개발자들도 WORA와 관련된 혁신을 이루기 위해 활발히 활동 하고 있다. 나는 몰랐었고 아마 여러분도 모를 만한 파이썬으로 할 수 있는 다양한 기능들을 소개해보겠다.

파이썬으로 할 수 있는 여러가지 UseCase

1) Kivy를 활용한 Cross-platform 모바일 앱 개발

현재 Dart(Flutter), JavaScript(ReactNative)가 대부분 모바일 앱 개발 시장을 장악하고 있다. 하지만 파이썬 개발자에게는 Kivy GUI Framework가 있다. Kivy를 활용하면 Android와 iOS플랫폼의 native앱을 만들 수 있다.

Kivy

Kivy를 보면 Flutter와 매우 비슷한 툴킷을 제공한다. Flutter가 구글의 Skia를 써서 2D element들을 렌더링하듯이, Kivy는 SDL(Simple Directmedia Layer)를 사용한다고 한다.

다른 모바일 프레임워크처럼 Kivy를 사용하면 platform-specific 애플리케이션 번들도 만들 수 있다. 또한 데스크탑 운영체제에서도 Kivy 앱을 실행할 수 있다. 놀랍게도 현재 구글플레이나 앱스토어에서도 Kivy-based 앱 판매를 허용하고 있다.

2) 브라우저에서 Python스크립트 실행

한 줄 요약 : React Application을 파이썬으로 만들 수 있다고??!

흔히들 파이썬은 인터프리터 언어이기 때문에 운영체제 위에서만 돌아간다고 생각한다. 따라서 웹브라우저에서 파이썬을 실행하려면, 원격 서버에(remote server)에 파이썬 인터프리터 인스턴스를 실행시키고 웹소켓과 같은 프로토콜을 사용해 통신하는 방식으로 해왔다. 하지만 이제는 Pyodide라는 파이썬 모듈을 활용해 client-side에서 파이썬 모듈을 실행할 수 있다.

브라우저의 WebAssembly구현체는 가상의 CPU-like 실행 환경을 제공하고있다. 그리고 Pyodide는 emscripten을 통해 Cpython의 웹어셈블리 버전을 실행한다. Emscripten 웹어셈블리 컴파일러는 가상 in-memory 파일 시스템도 지원한다. 따라서 Python의 filesystem API모듈도 브라우저에서 사용할 수 있다.

예를 들면 아래 스니펫을 실행해보면 브라우저에서 정상작동하는 것을 확인할 수 있다.

console.log(pyodide.runPython(`
     import os
     os.makedirs('dir/test')
     print(os.listdir('dir'))
`));

위 코드를 실행하면 Emscripten의 가상 파일시스템과 작동하여 아래와 같은 결과가 나오는 걸 확인할 수 있다.

['test']

따라서, numpy나 pandas, scipy, matplotlib과 같은 다양한 데이터과학 관련 모듈들을 이제는 client-side에서 실행하도록 할 수 있다. Pydidie 파이썬을 활용하면 또한 webAPI에도 접근할 수 있다. 예를 들어 아래 코드를 사용하면 browser alert를 띄울 수 있다.

import js
js.alert('Hello JavaScript!') # js module refers to window :)

3) Shell Script를 파이썬과 함께 사용하기

시스템 관리자들은 대부분 Bash script를 작성해서 유지보수 업무를 수행한다.

또한 반복적이고 time-consuming한 작업들을 자동화하기 위해 Shell script를 사용한다.

하지만 파이썬을 활용해서 Bash에서는 제공하지 않는 다양한 scripting language의 feature들을 사용할 수 있다. 하지만 이렇게 하면, Bash보다 더 많은 코드를 작성해야 하는데, 이를 해결해주는 프로젝트가 바로 Shellpy다.

Shellpy를 사용하면 bash-like 자동화 스크립트와 파이썬 코드를 함께 사용할 수 있다. 예를 들어보자

#!/usr/bin/env shellpy
print('Hello ShellPy')
`
echo "Hello" > test.txt
cat test.txt

위 코드를 실행해보면 Bash Command와 Python snippet을 하나의 Shellpy script file로 실행할 수 있는걸 볼 수 있다. Python으로 데이터를 처리하고, Bash를 사용해 프로세스를 spawn할 수 있는것이다. (물론 os.system, subprocess 등을 활용해서도 할 수 있긴 하다) 또한 Bash command의 output을 바로 Python variable에 assign할 수도 있다.

 

Shellpy를 사용하면 좀더 깔끔하고 좋은 automation script를 쓸 수 있지 않을까?

4) 파이썬으로 CLI 프로그램 만들기

일반적으로 framework나 library를 개발하다보면 자체적인 CLI application을 개발해야 할 때가 있다. 예를들어 Flutter 팀은 Flutter CLI를 제공하여 flutter application을 관리하고 설정할 수 있게 한다. 또한 automation script를 CLI 프로그램에 넣어 사용성을 높일 수도 있다. 예를 들어 특정 커맨드를 실행했을 때 특정 액션을 실행하거나 새로운 프로세스를 실행하게 하도록 할 수 있다.

많은 CLI 프로그램들이 Node.js의 commander.js, ink, oclif, chalk와 같은 모듈을 사용해 개발돼왔다.

하지만 구글의 오픈소스인 PythonFire프로젝트는 파이썬을 활용해 더욱 productive한 CLI 프로그램 개발환경을 제공한다. PythonFire는 자동으로 함수와 argument들을 CLI structure에 맞추어 코드를 생성한다. 또한 이미 있는 automation script를 CLI 프로그램으로 빠르게 만들 수 있다.

예를 들어보면 아래와 같이 코드를 작성하고

cli.py

import fire
def add(a, b):
  return a + b
def sub(a, b):
  return a - b
if __name__ == '__main__':
  fire.Fire()
./cli.py add 10 5
./cli.py sub 5 2

위와 같은 식으로 cli를 호출할 수 있다. alias를 쓰던지 하면, 더욱 효율적으로 할 수 있지 않을까?

 

파이썬을 좋아하는 입장에서 다양한 개발자들이 이런 다양한 시도를 해주는건 너무 흥미롭고 재밌고 감사하다.

기회가 된다면 앞서 소개한 프로젝트들을 활용해 개발해보는 것을 추천한다. 파이썬 화이팅!

 

 

참고 자료 :

https://kivy.org/#home

https://github.com/google/python-fire

https://github.com/lamerman/shellpy

https://medium.com/@shalithasuranga/5-python-use-cases-that-only-a-few-programmers-know-35e25ddf13d4?source=email-c650895df2d4-1640925611527-digest.reader-5517fd7b58a6-35e25ddf13d4----0-98------------------504b1bb2_aec3_4dab_9495_35b80b07e803-1-39307338_7270_49d4_8dcb_cfaaf56848c9

Comments