Яка хороша стратегія для підтримки ноутбуків IPython під контролем версій?
Формат ноутбука досить прихильний для контролю версій: якщо хочеться контролювати версію ноутбука та виводити, то це працює досить добре. Роздратування настає, коли хочеться лише керувати версією вводу, виключаючи вихідні клітинки (т.к. "побудувати продукти"), які можуть бути великими двійковими краплями, особливо для фільмів та сюжетів. Зокрема, я намагаюся знайти хороший робочий процес, який:
- дозволяє мені вибирати між включенням або виключенням виводу
- заважає мені випадково здійснити вихід, якщо я цього не хочу,
- дозволяє зберігати вихід у моїй локальній версії,
- дозволяє мені бачити, коли я маю зміни у входах за допомогою моєї системи управління версіями (тобто, якщо я керую лише версіями вхідними даними, але мій локальний файл має виходи, то я хотів би бачити, чи змінилися дані (що вимагає фіксації) Використання команди контролю стану версії завжди реєструє різницю, оскільки локальний файл має виходи.)
- дозволяє мені оновлювати робочий зошит (який містить вихід) з оновленого чистого ноутбука. (оновлення)
Як було сказано, якщо я вирішив включити виходи (що бажано, наприклад, при використанні nbviewer ), то все добре. Проблема полягає в тому, що я не хочу, щоб версія контролювала вихід. Існують деякі інструменти та сценарії для зняття виводу ноутбука, але часто я стикаюся з такими проблемами:
- Я випадково запускаю версію з висновком, тим самим забруднюючи своє сховище.
- Я чіткий вихід, щоб використовувати контроль версій, але дійсно краще зберегти висновок у моїй локальній копії (іноді для відтворення, наприклад, потрібен певний час).
- Деякі сценарії, які виводять смужку, трохи змінюють формат порівняно з
Cell/All Output/Clear
опцією меню, створюючи тим самим небажаний шум у розрізниках. Це вирішено за допомогою деяких відповідей. - Підтягуючи зміни до чистої версії файлу, мені потрібно знайти якийсь спосіб включення цих змін у свій робочий зошит без необхідності повторювати все. (оновлення)
Я розглянув кілька варіантів, про які я розповім нижче, але ще не знайшов хорошого комплексного рішення. Повне рішення може зажадати деяких змін у IPython або може покладатися на деякі прості зовнішні сценарії. В даний час я використовую ртутний , але хотів би рішення, яке також працює з git : ідеальним рішенням буде агностик для контролю версій.
Це питання обговорювалося багато разів, але немає остаточного чи чіткого рішення з точки зору користувача. Відповідь на це питання повинна дати остаточну стратегію. Це добре, якщо для нього потрібна остання (рівномірна розробка) версія IPython або легко встановлене розширення.
Оновлення: я грав у моїй модифікованій версії ноутбука, яка за бажанням зберігає .clean
версію при кожному збереженні, використовуючи пропозиції Грегорі Кросвайта . Це задовольняє більшість моїх обмежень, але залишає невирішеним наступне:
- Це ще не стандартне рішення (вимагає модифікації джерела ipython. Чи є спосіб досягти такої поведінки простим розширенням? Потрібен якийсь гак для збереження.
- Проблема, яку я маю з поточним робочим процесом, - це тягне зміни. Вони надійдуть у
.clean
файл, а потім потрібно якось інтегруватись у мою робочу версію. (Звичайно, я завжди можу повторно виконати зошит, але це може бути болем, особливо якщо деякі результати залежать від довгих обчислень, паралельних обчислень тощо). Я не маю хорошого уявлення про те, як це вирішити. . Можливо, робочий процес, що включає розширення на зразок ipycache, може працювати, але це здається занадто складним.
Примітки
Видалення (зняття) виводу
- Коли ноутбук працює, можна скористатися
Cell/All Output/Clear
опцією меню для видалення виводу. - Існує кілька сценаріїв для видалення виводу, наприклад, скрипт nbstripout.py, який видаляє вихід, але не видає такий же вихід, як за допомогою інтерфейсу ноутбука. Врешті-решт це було включено до репорта ipython / nbconvert , але це було закрито, заявляючи, що зміни тепер включені до ipython / ipython , але відповідна функціональність, здається, ще не була включена. (Оновлення) Це , як то кажуть, рішення Грегорі Crosswhite в показує , що це дуже легко зробити, навіть не вдаючись до IPython / nbconvert, тож такий підхід, ймовірно, дієвий, якщо його можна належним чином підключити. (Приєднання його до кожної системи управління версіями, однак, не здається гарною ідеєю - це має якось підключитися до механізму ноутбука.)
Групи новин
Випуски
- 977: запити на функцію ноутбука (відкрито) .
- 1280: Очистити все для збереження (Відкрити) . (Випливає з цієї дискусії .)
- 3295: зошити з автоматичним експортом: експортуйте лише явно позначені комірки (закрито) . Розв’язано розширенням 11 Додати магію написаннявиконання (Злиття) .
Витягніть запити
- 1621: clear In [] рядки підказок у "Очистити всі вихідні дані" (Об'єднані) . (Див. Також 2519 (Об’єднані) .)
- 1563: поліпшення clear_output (об'єднані) .
- 3065: складність зошитів (закрито) .
- 3291: Додайте можливість пропускати вихідні комірки під час збереження. (Закрито) . Це здається надзвичайно актуальним, проте було закрито пропозицією використовувати фільтр "чистий / розмазати". Відповідне питання, що ви можете використовувати, якщо ви хочете зняти вихід, перш ніж запускати git diff? здається, не відповіли.
- 3312: WIP: Гачки для збереження ноутбука (закрито) .
- 3747: ipynb -> ipynb трансформатор (закрито) . Це знижується в 4175 році .
- 4175: nbconvert: база експортерів без Jinja (об'єднана) .
- 142: Використовуйте STDIN в nbstripout, якщо не вказано введення (Open) .
--script
можливістю, але це було видалено. Я чекаю, коли будуть введені в життя гачки після збереження ( які заплановані ), і тоді я думаю, що зможу запропонувати прийнятне рішення, поєднуючи декілька методів.