Marimo - โน้ตบุ๊ก Reactive แบบโอเพนซอร์สสำหรับ Python
(github.com/marimo-team)- โน้ตบุ๊กสำหรับทดลองกับข้อมูลและโมเดลได้อย่างรวดเร็ว
- รันแบบรายเซลล์ คำนวณและอัปเดตอัตโนมัติ
- รันใหม่ได้เสมอโดยไม่มีสถานะที่ซ่อนอยู่
- บันทึกเป็นไฟล์ Python จึงเป็นมิตรกับ Git
- สามารถทำโน้ตบุ๊กให้เป็นไปป์ไลน์หรือเผยแพร่เป็นเว็บแอปแบบอินเทอร์แอ็กทีฟได้
สภาพแวดล้อมการเขียนโปรแกรมแบบ Reactive
- marimo รับประกันความสอดคล้องกันของโค้ดในโน้ตบุ๊ก เอาต์พุต และสถานะของโปรแกรม
- เมื่อรันเซลล์ marimo จะอัปเดตเซลล์ที่อ้างอิงตัวแปรนั้นโดยอัตโนมัติ เพื่อป้องกันข้อผิดพลาดจากการต้องรันเซลล์ใหม่ด้วยตนเอง
- เมื่อลบเซลล์ marimo จะลบตัวแปรนั้นออกจากหน่วยความจำของโปรแกรม เพื่อกำจัดสถานะที่ซ่อนอยู่
- โน้ตบุ๊กจะทำงานตามลำดับที่กำหนดแน่นอนโดยอิงจากการอ้างอิงตัวแปร จึงไม่ขึ้นกับตำแหน่งของเซลล์บนหน้า
- เมื่อโต้ตอบกับองค์ประกอบ UI เช่น สไลเดอร์ ดรอปดาวน์ และตัวแปลง DataFrame เซลล์ที่ใช้ค่านั้นจะถูกรันใหม่ด้วยค่าล่าสุดโดยอัตโนมัติ
- 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 cloud ได้ - การรันเป็นสคริปต์: รัน
python your_notebook.pyเพื่อรันโน้ตบุ๊ก marimo ในรูปแบบสคริปต์ - การแปลง Jupyter โน้ตบุ๊กอัตโนมัติ: ใช้ CLI เพื่อแปลง Jupyter โน้ตบุ๊กเป็น marimo โน้ตบุ๊กโดยอัตโนมัติ
- บทช่วยสอน: รัน
marimo tutorial --helpเพื่อดูรายการบทช่วยสอนทั้งหมด
เรียนรู้เพิ่มเติม
- marimo ออกแบบมาให้ผู้เริ่มต้นเริ่มใช้งานได้ง่าย และมีความสามารถหลากหลายสำหรับผู้ใช้ระดับมืออาชีพ
- ตัวอย่างเช่น สามารถดูเครื่องมือสร้างภาพ embedding (วิดีโอ) ที่สร้างด้วย marimo ได้
- สามารถศึกษาข้อมูลเพิ่มเติมได้จากเอกสาร โฟลเดอร์
examples/และแกลเลอรี
แรงบันดาลใจ
- marimo กำลังสร้าง Python โน้ตบุ๊กขึ้นใหม่ในฐานะโปรแกรม Python ที่ทำซ้ำผลได้ โต้ตอบได้ และแชร์ได้
- ภายใต้ความเชื่อว่าเครื่องมือที่เราใช้มีผลต่อวิธีคิด marimo หวังว่าจะมอบสภาพแวดล้อมการเขียนโปรแกรมที่ดีกว่าให้กับชุมชน Python
- marimo ได้แรงบันดาลใจจากหลายแหล่งและหลายโปรเจ็กต์ เช่น Pluto.jl, ObservableHQ และบทความของ Bret Victor
- marimo เป็นส่วนหนึ่งของกระแสการเขียนโปรแกรมแบบ reactive dataflow ที่กว้างขึ้น ซึ่งนำแนวคิดการเขียนโปรแกรมเชิงฟังก์ชัน เชิงประกาศ และแบบ reactive จากเครื่องมือต่างๆ เช่น IPyflow, streamlit, TensorFlow, PyTorch, JAX และ React มาปรับปรุงเครื่องมือหลากหลายชนิด
ความเห็นของ GN⁺
- marimo คือ Python โน้ตบุ๊กแบบ reactive ที่ล้ำสมัย โดยมุ่งแก้ข้อจำกัดของเครื่องมืออย่าง Jupyter โน้ตบุ๊กเดิมๆ ทำให้สามารถทดลองข้อมูลและโมเดล สร้างความมั่นใจในความถูกต้องของโน้ตบุ๊ก และนำโน้ตบุ๊กไปต่อยอดเป็นไปป์ไลน์หรือเว็บแอปแบบอินเทอร์แอ็กทีฟได้
- เครื่องมือนี้ให้ความสำคัญกับความสอดคล้องและความสามารถในการทำซ้ำของโค้ด พร้อมทำให้การโต้ตอบกับองค์ประกอบส่วนติดต่อผู้ใช้ง่ายขึ้น เพื่อยกระดับประสบการณ์การเขียนโปรแกรม
- marimo ช่วยให้การทำงานร่วมกันและการแชร์ในงานด้านวิทยาศาสตร์ข้อมูล การวิจัย และการศึกษาเป็นเรื่องง่ายขึ้น อีกทั้งยังมอบแพลตฟอร์มที่ส่งเสริมการมีปฏิสัมพันธ์และการแบ่งปันความรู้ระหว่างผู้ใช้ผ่านการสร้างชุมชน
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ในฐานะผู้ใช้ทั้ง Jupyter และ Observable Notebook รู้สึกว่าก่อนหน้านี้ Observable ขาดความสามารถด้านการตอบสนองของเซลล์ และคิดว่าโปรเจกต์นี้แก้ปัญหานั้นได้ดี ชอบที่รูปแบบไฟล์ของ Marimo เป็น Python และก็ชอบไลเซนส์ Apache 2 ด้วย รวมถึงทึ่งกับฟีเจอร์ค้นหาของ GitHub Copilot
จากการทำงานร่วมกับผู้ร่วมงานที่ใช้ Jupyter Notebook ปัญหาคือการตั้งค่าสภาพแวดล้อมและสถานะที่ซ่อนอยู่ของ Jupyter โปรเจกต์นี้พยายามแก้ปัญหาข้อหลัง แต่ต้องแลกมาด้วยความยืดหยุ่น หากเน้นเรื่องการทำซ้ำได้ นี่ก็อาจเป็นจุดยอมรับได้
requirements.txtเป็นวิธีแก้มาตรฐานของอีกปัญหาหนึ่ง แต่ใช้งานค่อนข้างยุ่งยากrequirements.txtนั้นค่อนข้างไม่สะดวก และหวังว่าจะมีทางออกที่ดีกว่าดีใจที่ในที่สุดก็มีคนลงมือทำสิ่งนี้ แม้จะมีส่วนขยาย Vscode แต่ก็น่าเสียดายที่มันเปิดมุมมองแบบเบราว์เซอร์เต็มหน้าจอแทนที่จะใช้ UI โน้ตบุ๊กเดิมของ Vscode ขอแบ่งปันความเห็นเกี่ยวกับการจัดการแพ็กเกจและการนำโค้ดไปใช้งานจริง
มีคำถามอยู่บ้างเกี่ยวกับแพลตฟอร์มนี้: ขอคำอธิบายเรื่อง interactive widgets รวมถึงการพึ่งพาและการทำงานร่วมกับ ecosystem ของ Jupyter
คิดว่าส่วนขยาย Jupytext ถูกประเมินค่าต่ำเกินไป มันช่วยแก้ปัญหาการทำงานร่วมกับ git ของ Jupyter และปัญหาแนวปฏิบัติในการเขียนโปรแกรมที่ขัดขวางการเขียนไฟล์ไลบรารี คาดว่าการอัปเดตแบบ reactive ของโปรเจกต์ใหม่นี้จะเป็นประโยชน์ต่อทั้งผู้เริ่มต้นและโปรเจกต์ที่ซับซ้อน
รายการ dependency สั้น และนอกจาก tornado แล้วก็ไม่ได้ดึง dependency เพิ่มจำนวนมากเข้ามา ดูเป็นโปรเจกต์ที่มีประโยชน์และเท่มาก
รู้สึกว่า Marimo ยอดเยี่ยมมาก และสงสัยว่ามีการพิจารณาเพิ่มการรองรับ mermaid.js ใน markdown หรือไม่
ขอประกาศตัวว่าเป็นแฟนของ Akshay และ Myles ผู้ก่อตั้ง Marimo และคาดหวังว่าการมีคู่แข่งของ Jupyter จะส่งผลดีต่อ ecosystem ของเครื่องมือทางวิทยาศาสตร์
คิดว่า Quarto แก้ปัญหาหลายอย่างของ Jupyter ที่ถูกพูดถึงในเธรดนี้ได้ ที่ NIH ก็แนะนำให้ใช้ Quarto และมีการจัดอบรมด้วย
การนิยามตัวแปรเดียวกันหลายครั้งถือเป็นข้อผิดพลาด ซึ่งเหตุผลก็ชัดเจนอยู่แล้ว แต่ถ้าตัวแปรนั้นถูกใช้แค่ในเซลล์ที่มีการใช้งานครั้งแรก ก็ควรอนุญาตให้ใช้ชื่อตัวแปรซ้ำได้