กลยุทธ์ที่ดีในการรักษาโน้ตบุ๊กIPython ให้อยู่ในการควบคุมเวอร์ชัน
รูปแบบสมุดบันทึกค่อนข้างคล้อยตามสำหรับการควบคุมเวอร์ชัน: หากต้องการควบคุมเวอร์ชันโน้ตบุ๊กและเอาท์พุตสิ่งนี้จะทำงานได้ค่อนข้างดี ความรำคาญเกิดขึ้นเมื่อเราต้องการควบคุมการป้อนข้อมูลเฉพาะรุ่นไม่รวมเอาท์พุทของเซลล์ (aka. "build products") ซึ่งอาจเป็น blobs ไบนารีขนาดใหญ่โดยเฉพาะอย่างยิ่งสำหรับภาพยนตร์และแปลง โดยเฉพาะอย่างยิ่งฉันพยายามหาเวิร์กโฟลว์ที่ดีที่:
- อนุญาตให้ฉันเลือกระหว่างการรวมหรือไม่รวมเอาต์พุต
- ป้องกันฉันจากการส่งออกโดยไม่ตั้งใจถ้าฉันไม่ต้องการ
- ช่วยให้ฉันสามารถเก็บเอาท์พุทในรุ่นท้องถิ่นของฉัน
- อนุญาตให้ฉันดูเมื่อฉันมีการเปลี่ยนแปลงในอินพุตโดยใช้ระบบควบคุมเวอร์ชันของฉัน (เช่นถ้าฉันควบคุมเฉพาะอินพุตเท่านั้น แต่ไฟล์ในเครื่องของฉันมีเอาต์พุตฉันต้องการจะดูว่าอินพุตมีการเปลี่ยนแปลงหรือไม่ ) การใช้คำสั่งสถานะการควบคุมเวอร์ชันจะลงทะเบียนความแตกต่างเสมอเนื่องจากไฟล์ในเครื่องมีเอาต์พุต)
- อนุญาตให้ฉันอัปเดตสมุดบันทึกการทำงานของฉัน (ซึ่งมีเอาต์พุต) จากสมุดบันทึกที่อัปเดตที่สะอาดแล้ว (update)
ตามที่กล่าวไว้ถ้าฉันเลือกที่จะรวมเอาท์พุท (ซึ่งเป็นที่ต้องการเมื่อใช้nbviewerเป็นต้น) ทุกอย่างก็โอเค ปัญหาคือเมื่อฉันไม่ต้องการรุ่นควบคุมผลลัพธ์ มีเครื่องมือและสคริปต์บางอย่างสำหรับการลอกเอาต์พุตของโน้ตบุ๊ก แต่บ่อยครั้งที่ฉันพบปัญหาต่อไปนี้:
- ฉันส่งเวอร์ชันโดยไม่ตั้งใจด้วยเหตุนี้จึงทำให้ที่เก็บข้อมูลของฉันสกปรก
- ฉันลบเอาต์พุตเพื่อใช้การควบคุมเวอร์ชัน แต่จะเก็บเอาท์พุทไว้ในเครื่องของฉัน (บางครั้งใช้เวลานานในการสร้างตัวอย่าง)
- สคริปต์บางตัวที่ดึงเอาท์พุทเปลี่ยนรูปแบบเล็กน้อยเมื่อเทียบกับ
Cell/All Output/Clear
ตัวเลือกเมนูดังนั้นจึงสร้างเสียงรบกวนที่ไม่พึงประสงค์ในส่วนต่าง นี่คือคำตอบบางคำตอบ - เมื่อดึงการเปลี่ยนแปลงไปยังไฟล์เวอร์ชั่นใหม่ทั้งหมดฉันต้องหาวิธีที่จะรวมการเปลี่ยนแปลงเหล่านั้นไว้ในสมุดบันทึกการทำงานของฉันโดยไม่ต้องรันใหม่ทุกอย่าง (update)
ฉันได้พิจารณาตัวเลือกหลายอย่างที่ฉันจะกล่าวถึงด้านล่าง แต่ยังไม่พบวิธีแก้ปัญหาที่ครอบคลุมดี โซลูชันที่สมบูรณ์อาจต้องการการเปลี่ยนแปลงบางอย่างกับ IPython หรืออาจต้องพึ่งพาสคริปต์ภายนอกแบบง่าย ๆ ตอนนี้ฉันใช้Mercurialแต่ต้องการโซลูชันที่ทำงานร่วมกับgit ได้ : ทางออกที่ดีที่สุดคือการควบคุมแบบไม่เชื่อเรื่องพระเจ้า
ปัญหานี้มีการพูดคุยหลายครั้ง แต่ไม่มีวิธีการแก้ปัญหาที่ชัดเจนหรือชัดเจนจากมุมมองของผู้ใช้ คำตอบสำหรับคำถามนี้ควรให้กลยุทธ์ที่ชัดเจน ไม่เป็นไรหากต้องการIPythonเวอร์ชันล่าสุด (แม้แต่การพัฒนา) หรือส่วนขยายที่ติดตั้งได้ง่าย
ปรับปรุง:ฉันได้รับการเล่นกับสมุดบันทึกของฉันมีการปรับเปลี่ยนรุ่นซึ่งเลือกที่จะบันทึก.clean
รุ่นทุกประหยัดการใช้ข้อเสนอแนะของเกรกอรี่ Crosswhite สิ่งนี้ตอบสนองข้อ จำกัด ส่วนใหญ่ของฉันได้ แต่ยังไม่ได้แก้ไข:
- นี่ยังไม่เป็นโซลูชันมาตรฐาน (ต้องมีการแก้ไขของแหล่งที่มาของ ipython มีวิธีการที่จะบรรลุพฤติกรรมนี้ด้วยส่วนขยายที่เรียบง่ายหรือไม่ต้องการตะขอเกี่ยวแบบประหยัด
- ปัญหาที่ฉันมีกับเวิร์กโฟลว์ปัจจุบันกำลังดึงการเปลี่ยนแปลง สิ่งเหล่านี้จะเข้าสู่
.clean
ไฟล์จากนั้นจะต้องรวมเข้ากับเวอร์ชันการทำงานของฉัน (แน่นอนว่าฉันสามารถรันสมุดบันทึกซ้ำได้ตลอดเวลา แต่อาจเป็นความเจ็บปวดโดยเฉพาะอย่างยิ่งหากผลลัพธ์บางอย่างขึ้นอยู่กับการคำนวณที่ยาวนานการคำนวณแบบขนาน ฯลฯ ) ฉันยังไม่มีความคิดที่ดีเกี่ยวกับวิธีการแก้ไขปัญหานี้เลย . บางทีเวิร์กโฟลว์ที่เกี่ยวข้องกับส่วนขยายอย่างipycacheอาจทำงานได้ แต่ดูเหมือนซับซ้อนเกินไปเล็กน้อย
หมายเหตุ
การเอาออก (ลอก) เอาท์พุท
- เมื่อโน้ตบุ๊คกำลังทำงานหนึ่งสามารถใช้
Cell/All Output/Clear
ตัวเลือกเมนูสำหรับการเอาออก - มีสคริปต์บางตัวสำหรับการลบเอาต์พุตเช่นสคริปต์nbstripout.pyซึ่งลบเอาต์พุต แต่ไม่สร้างเอาต์พุตเดียวกันกับการใช้อินเตอร์เฟสโน้ตบุ๊ก นี่รวมอยู่ในipython / nbconvert repo ในที่สุด แต่สิ่งนี้ได้ถูกปิดระบุว่าตอนนี้การเปลี่ยนแปลงนั้นรวมอยู่ในipython / ipythonแต่ฟังก์ชั่นที่เกี่ยวข้องดูเหมือนว่ายังไม่ได้รวมอยู่ด้วย (อัปเดต)ดังที่ได้กล่าวไว้โซลูชันของ Gregory Crosswhiteแสดงให้เห็นว่านี่เป็นเรื่องง่ายที่จะทำแม้จะไม่มีการเรียกใช้ipython / nbconvertดังนั้นวิธีการนี้อาจใช้การได้หากสามารถเชื่อมต่อได้อย่างถูกต้อง (การเชื่อมต่อเข้ากับระบบควบคุมแต่ละเวอร์ชันอย่างไรก็ตามดูเหมือนจะไม่เป็นความคิดที่ดี - สิ่งนี้ควรเชื่อมโยงกับกลไกของโน้ตบุ๊ค)
กลุ่มข่าว
ประเด็น
- 977: คำขอคุณลักษณะโน๊ตบุ๊ค (เปิด)
- 1280: ล้างทั้งหมดในบันทึกตัวเลือก (เปิด) (ติดตามจากการสนทนานี้)
- 3295: โน๊ตบุ๊ค autoexported: เพียงส่งออกเซลล์ที่ทำเครื่องหมายไว้อย่างชัดเจน (Closed) แก้ไขได้โดยการขยาย11 เพิ่ม writeandexecute มายากล (รวม)
ดึงคำขอ
- 1621: ที่ชัดเจนใน [] หมายเลขพรอมต์ที่ "ล้างทั้งหมดเอาท์พุท" (รวม) (ดูเพิ่มเติมที่2519 (รวม) )
- 1563: การปรับปรุง clear_output (รวม)
- 3065: diff-ความสามารถของโน๊ตบุ๊ค (Closed)
- 3291: เพิ่มตัวเลือกเพื่อข้ามเซลล์เอาต์พุตเมื่อบันทึก (Closed) ดูเหมือนว่าจะเกี่ยวข้องกันมาก แต่ก็ปิดด้วยคำแนะนำให้ใช้ตัวกรอง "clean / smudge" คำถามที่เกี่ยวข้องคุณสามารถใช้อะไรได้บ้างหากคุณต้องการตัดเอาต์พุตก่อนที่จะรัน git diff ดูเหมือนจะไม่ได้รับคำตอบ
- 3312: WIP: โน๊ตบุ๊คบันทึกตะขอ (Closed)
- 3747: ipynb -> ipynb หม้อแปลง (Closed) นี้จะ rebased ใน4175
- 4175: nbconvert: ฐานส่งออก Jinjaless (รวม)
- 142: ใช้ STDIN ใน nbstripout หากไม่มีการป้อนข้อมูลจะได้รับ (เปิด)
--script
ตัวเลือก แต่ถูกลบไปแล้ว ฉันรอจนกว่าจะมีการติดตั้งตะขอบันทึกหลังติดตั้ง ( ซึ่งวางแผนไว้ ) ที่ฉันคิดว่าฉันจะสามารถให้โซลูชันที่ยอมรับได้ซึ่งรวมเทคนิคหลายอย่างเข้าด้วยกัน