GN⁺: Marimo - Python용 오픈소스 Reactive Notebook
(github.com/marimo-team)- 데이터와 모델을 가지고 빠르게 시험 가능한 노트북
- 셀단위 실행, 자동 계산 및 업데이트
- 감춰진 상태없이 항상 재실행 가능
- Python 파일로 저장되어 Git-Friendly
- 노트북을 파이프라인으로 만들거나 인터랙티브 웹앱으로 배포 가능
반응형 프로그래밍 환경
- marimo는 노트북 코드, 출력, 프로그램 상태의 일관성을 보장함.
- 셀을 실행하면 marimo가 자동으로 해당 변수를 참조하는 셀을 업데이트하여 수동으로 셀을 재실행하는 오류를 방지함.
- 셀을 삭제하면 marimo가 프로그램 메모리에서 해당 변수를 제거하여 숨겨진 상태를 제거함.
- 노트북은 변수 참조를 기반으로 한 결정적인 순서로 실행되어 페이지상의 셀 위치에 의존하지 않음.
- 슬라이더, 드롭다운, 데이터프레임 변환기와 같은 UI 요소와 상호작용하면 해당 값을 사용하는 셀이 자동으로 최신 값으로 재실행됨.
- marimo는 코드를 정적으로 분석하여 실행해야 하는 셀만 실행하여 성능을 향상시킴.
- marimo에는 GitHub Copilot, Black 코드 포매팅, HTML 내보내기, 빠른 코드 완성, VS Code 확장 프로그램 등 다양한 편의 기능이 포함됨.
빠른 시작
- 설치: 터미널에서
pip install marimo
또는conda install -c conda-forge marimo
를 실행하여 marimo를 설치함. - 노트북 생성:
marimo editor
로 빈 노트북을 생성하고marimo edit your_notebook.py
로 특정 이름의 노트북을 편집함. - 앱 실행:
marimo run your_notebook.py
를 실행하여 웹 앱으로 노트북을 실행함. 이 앱은 marimo 클라우드에 배포됨. - 스크립트로 실행:
python your_notebook.py
를 실행하여 marimo 노트북을 스크립트로 실행함. - Jupyter 노트북 자동 변환: CLI를 사용하여 Jupyter 노트북을 marimo 노트북으로 자동 변환함.
- 튜토리얼:
marimo tutorial --help
를 실행하여 모든 튜토리얼을 나열함.
더 알아보기
- marimo는 초보자도 쉽게 시작할 수 있으며, 전문 사용자를 위한 다양한 기능을 제공함.
- 예를 들어, marimo에서 만든 임베딩 시각화 도구(비디오)를 확인할 수 있음.
- 문서,
examples/
폴더, 갤러리를 통해 더 많은 정보를 얻을 수 있음.
영감
- marimo는 재현 가능하고, 상호작용이 가능하며, 공유할 수 있는 Python 프로그램으로서 Python 노트북을 재창조함.
- 사용하는 도구가 사고 방식을 형성한다는 믿음 하에, Python 커뮤니티에 더 나은 프로그래밍 환경을 제공하기를 희망함.
- Pluto.jl, ObservableHQ, Bret Victor의 에세이 등 많은 곳과 프로젝트에서 영감을 받음.
- marimo는 IPyflow, streamlit, TensorFlow, PyTorch, JAX, React 등의 기능적, 선언적, 반응형 프로그래밍 아이디어가 다양한 도구를 개선하는 더 큰 반응형 데이터플로우 프로그래밍 운동의 일부임.
GN⁺의 의견
- marimo는 기존의 Jupyter 노트북과 같은 도구의 한계를 극복하고자 하는 혁신적인 반응형 Python 노트북으로, 데이터와 모델 실험, 노트북의 정확성에 대한 확신, 파이프라인이나 인터랙티브 웹 앱으로의 노트북 상용화를 가능하게 함.
- 이 도구는 코드의 일관성과 재현성을 중시하며, 사용자 인터페이스 요소와의 상호작용을 간소화하여 프로그래밍 경험을 개선함.
- marimo는 데이터 과학, 연구, 교육 분야에서 협업과 공유를 용이하게 하며, 커뮤니티 구축을 통해 사용자 간의 상호작용과 지식 공유를 촉진하는 플랫폼을 제공함.
Hacker News 의견
-
Jupyter와 Observable 노트북 사용자로서 Observable의 셀 반응성 부족을 느꼈는데, 이 문제를 잘 해결했다고 생각함. Marimo 파일 포맷이 파이썬으로 되어 있어 좋고, Apache 2 라이선스도 마음에 듦. GitHub Copilot 기능 발견에 감탄함.
- Jupyter와 Observable 노트북 사용자가 셀 반응성 문제를 잘 해결한 Marimo에 대해 긍정적인 반응을 보이며, 파일 포맷이 파이썬이라는 점과 Apache 2 라이선스, GitHub Copilot 기능에 대해 높이 평가함.
-
Jupyter Notebook을 사용하는 협업자와의 작업에서 환경 설정과 Jupyter의 숨겨진 상태가 문제였음. 이 프로젝트는 두 번째 문제를 해결하려고 하지만 유연성을 희생함. 재현성에 중점을 둔다면 이는 타협점이 될 수 있음.
requirements.txt
는 다른 문제에 대한 표준 해결책이지만, 사용하기 번거로움.- Jupyter Notebook의 환경 설정과 숨겨진 상태 문제를 지적하며, 이 프로젝트가 후자를 해결하려 하지만 유연성이 떨어질 수 있다고 언급함.
requirements.txt
의 사용이 번거롭다고 느끼며, 더 나은 해결책을 희망함.
- Jupyter Notebook의 환경 설정과 숨겨진 상태 문제를 지적하며, 이 프로젝트가 후자를 해결하려 하지만 유연성이 떨어질 수 있다고 언급함.
-
마침내 누군가 이 일을 하고 있어서 기쁨. Vscode 확장 기능이 있지만, Vscode의 기존 노트북 인터페이스 대신 전체 브라우저 뷰를 여는 점이 아쉬움. 패키지 관리와 프로덕션 코드 배포에 대한 생각을 공유함.
- Vscode 확장 기능에 대한 기대와 아쉬움을 표현하며, 패키지 관리와 코드 배포의 중요성을 강조함. 프로젝트에 대한 기여 의사를 밝힘.
-
플랫폼에 대한 몇 가지 질문이 있음: 인터랙티브 위젯, Jupyter 생태계와의 의존성 및 상호작용에 대한 설명 요청.
- 플랫폼의 인터랙티브 위젯 지원, Jupyter 생태계와의 관계에 대해 궁금해하며, 자신의 위젯을 플랫폼에 포팅하는 데 관심을 표함.
-
Jupytext 확장 기능이 과소평가되었다고 생각함. Jupyter의 git 상호작용 문제와 라이브러리 파일 작성을 저해하는 프로그래밍 관행 문제를 해결함. 새 프로젝트의 반응형 업데이트가 초보자나 복잡한 프로젝트에 유용할 것으로 기대함.
- Jupytext 확장 기능의 유용성을 강조하며, 새 프로젝트의 반응형 업데이트가 프로그래밍 초보자나 복잡한 프로젝트에 도움이 될 것이라고 기대함.
-
의존성 목록이 짧고, tornado 외에 다른 의존성이 많은 추가 의존성을 끌어들이지 않음. 매우 유용하고 멋진 프로젝트로 보임.
- 프로젝트의 의존성 목록이 간결하며 tornado를 제외하고는 큰 부담이 없다고 평가함. 프로젝트의 유용성과 멋짐을 칭찬함.
-
Marimo가 훌륭하다고 느낌. markdown에서 mermaid.js 지원을 추가하는 것에 대한 고려가 있는지 궁금함.
- Marimo에 대한 긍정적인 반응을 보이며, markdown에서 mermaid.js 지원 추가에 대한 가능성을 문의함.
-
Marimo의 창시자인 Akshay와 Myles를 팬이라고 밝히며, Jupyter에 대한 경쟁자가 생겨 과학 도구 생태계에 좋은 영향을 줄 것이라고 기대함.
- Marimo와 그 창시자들을 지지하며, 이러한 경쟁이 과학 도구 생태계에 긍정적인 변화를 가져올 것이라고 기대함.
-
Quarto가 이 스레드에서 언급된 Jupyter의 많은 문제를 해결한다고 생각함. NIH에서도 Quarto 사용을 권장하고 교육을 제공함.
- Quarto가 Jupyter의 여러 문제를 해결할 수 있다고 언급하며, NIH에서 Quarto 사용을 권장하고 교육을 제공한다는 사실을 공유함.
-
동일한 변수를 여러 번 정의하는 것은 오류임. 이유는 명백함. 하지만 변수가 처음 쓰이는 셀에서만 사용된다면, 변수 이름 재사용이 가능해야 함.
- 변수 재정의에 대한 오류를 지적하며, 특정 조건에서 변수 이름 재사용이 가능해야 한다는 의견을 제시함.