Какова хорошая стратегия для хранения ноутбуков IPython под контролем версий?
Формат ноутбука вполне поддается контролю версий: если кто-то хочет управлять версиями ноутбука и выводов, это работает довольно хорошо. Раздражение возникает, когда нужно только контролировать версию входа, исключая выходные данные ячеек (иначе говоря, «продукты сборки»), которые могут быть большими двоичными объектами, особенно для фильмов и сюжетов. В частности, я пытаюсь найти хороший рабочий процесс, который:
- позволяет мне выбирать между включением или исключением вывода,
- предотвращает случайное принятие вывода, если я этого не хочу,
- позволяет мне сохранить вывод в моей локальной версии,
- позволяет мне видеть, когда у меня есть изменения во входах, используя мою систему контроля версий (то есть, если я только управляю версиями входов, но мой локальный файл имеет выходы, то я хотел бы видеть, изменились ли входы (требующий фиксации Использование команды управления версиями статуса всегда регистрирует разницу, поскольку локальный файл имеет выходные данные.)
- позволяет мне обновить мою рабочую записную книжку (которая содержит вывод) из обновленной чистой записной книжки. (Обновить)
Как уже упоминалось, если я решил включить выходные данные (что желательно при использовании nbviewer, например), то все в порядке. Проблема в том, что я не хочу, чтобы контроль версий выводился. Существуют некоторые инструменты и сценарии для удаления выходных данных ноутбука, но часто я сталкиваюсь со следующими проблемами:
- Я случайно фиксирую версию с выводом, тем самым загрязняя мой репозиторий.
- Я очищаю вывод для использования контроля версий, но на самом деле предпочитаю сохранять вывод в моей локальной копии (например, иногда требуется некоторое время для воспроизведения).
- Некоторые из сценариев, которые ограничивают вывод, слегка изменяют формат по сравнению с
Cell/All Output/Clear
опцией меню, создавая тем самым нежелательный шум в diff-файлах. Это решается некоторыми ответами. - При извлечении изменений в чистую версию файла мне нужно найти способ включить эти изменения в мою рабочую тетрадь без необходимости повторного запуска. (Обновить)
Я рассмотрел несколько вариантов, которые буду обсуждать ниже, но пока не нашел хорошего комплексного решения. Полное решение может потребовать некоторых изменений в IPython или может полагаться на некоторые простые внешние сценарии. В настоящее время я использую Mercurial , но хотел бы решение, которое также работает с Git : идеальным решением будет независимость от контроля версий.
Эта проблема обсуждалась много раз, но нет однозначного или четкого решения с точки зрения пользователя. Ответ на этот вопрос должен дать окончательную стратегию. Хорошо, если для этого требуется последняя версия (даже для разработки) IPython или легко устанавливаемое расширение.
Обновление: я играл с моей модифицированной версией ноутбука, которая по желанию сохраняет .clean
версию при каждом сохранении, используя рекомендации Грегори Кроссвайта . Это удовлетворяет большинству моих ограничений, но оставляет следующее нерешенным:
- Это еще не стандартное решение (требуется модификация исходного кода ipython. Есть ли способ добиться такого поведения с помощью простого расширения? Требуется какая-то ловушка при сохранении.
- Проблема, с которой я сталкиваюсь в текущем рабочем процессе, заключается в получении изменений. Они войдут в
.clean
файл, а затем должны быть каким-то образом интегрированы в мою рабочую версию. (Конечно, я всегда могу перезапустить ноутбук, но это может быть неприятно, особенно если некоторые результаты зависят от длинных вычислений, параллельных вычислений и т. Д.) Я пока не знаю, как решить эту проблему. , Возможно, рабочий процесс, включающий такое расширение, как ipycache, может сработать, но это кажется слишком сложным.
Ноты
Удаление (удаление) вывода
- Когда ноутбук работает, можно использовать пункт
Cell/All Output/Clear
меню для удаления вывода. - Есть несколько сценариев для удаления вывода, например, скрипт nbstripout.py, который удаляет вывод, но не выдает тот же вывод, что и при использовании интерфейса ноутбука. В конечном итоге это было включено в репозиторий ipython / nbconvert , но оно было закрыто, заявив, что изменения теперь включены в ipython / ipython , но соответствующая функциональность, похоже, еще не была включена. (обновление) При этом решение Грегори Кроссуайта показывает, что это довольно легко сделать, даже не вызывая ipython / nbconvertТаким образом, этот подход, вероятно, работает, если его можно правильно подключить. (Однако присоединение его к каждой системе контроля версий не является хорошей идеей - это должно каким-то образом подключаться к механизму ноутбука).
Телеконференции
вопросы
- 977: запросы функций ноутбука (Open) .
- 1280: Очистить все при сохранении (Открыть) . (Следует из этого обсуждения .)
- 3295: автоэкспортированные записные книжки: экспортировать только явно помеченные ячейки (закрыто) . Разрешено расширением 11 Добавить запись в исполняемую магию (Объединено) .
Тянуть запросы
- 1621: очистить номера подсказок [] в «Очистить все выходные данные» (объединены) . (См. Также 2519 (объединено) .)
- 1563: улучшения clear_output (объединены) .
- 3065: доступность тетрадей (закрыт) .
- 3291: добавить опцию, чтобы пропустить выходные ячейки при сохранении. (Закрыто) . Это кажется чрезвычайно актуальным, однако было закрыто с предложением использовать фильтр «чистый / грязный». Актуальный вопрос: что вы можете использовать, если хотите удалить вывод перед запуском git diff? кажется, не было ответа.
- 3312: WIP: крючки для сохранения в ноутбуке (закрыто) .
- 3747: ipynb -> ipynb преобразователь (закрыт) . Это перебазировано в 4175 году .
- 4175: nbconvert: база экспортеров Jinjaless (объединена) .
- 142: Используйте STDIN в nbstripout, если не вводится никаких данных (открыто) .
--script
опцией, но это было удалено. Я жду, пока не будут реализованы хуки после сохранения ( которые запланированы ), и в этот момент, я думаю, я смогу предоставить приемлемое решение, объединяющее несколько методов.Ответы:
Вот мое решение с git. Это позволяет вам просто добавлять и фиксировать (и изменять) как обычно: эти операции не изменят ваше рабочее дерево, и в то же время (перезапуск) записной книжки не изменит вашу историю мерзавцев.
Хотя это, вероятно, может быть адаптировано к другим VCS, я знаю, что это не удовлетворяет вашим требованиям (по крайней мере, независимость от VSC). Тем не менее, он идеально подходит для меня, и хотя он не является чем-то особенно выдающимся, и многие люди, вероятно, уже используют его, я не нашел четких инструкций о том, как реализовать это путем поиска в Google. Так что это может быть полезно для других людей.
~/bin/ipynb_output_filter.py
)chmod +x ~/bin/ipynb_output_filter.py
)Создайте файл
~/.gitattributes
со следующим содержимымЗапустите следующие команды:
Выполнено!
Ограничения:
somebranch
и делаете этоgit checkout otherbranch; git checkout somebranch
, вы обычно ожидаете, что рабочее дерево не изменится. Здесь вместо этого вы потеряете вывод и нумерацию ячеек ноутбуков, источник которых отличается между двумя ветвями.git commit notebook_file.ipynb
, хотя, по крайней мере, это избавитgit diff notebook_file.ipynb
от мусора base64).Мое решение отражает тот факт, что мне лично не нравится сохранять версии сгенерированного материала - обратите внимание, что объединение с выводом почти гарантированно сделает недействительным вывод, или вашу производительность, или оба.
РЕДАКТИРОВАТЬ:
если вы примете решение, как я предлагал, то есть глобально, у вас будут проблемы в случае, если для какого-то git-репо вы захотите вывести версию. Поэтому, если вы хотите отключить фильтрацию выходных данных для конкретного репозитория git, просто создайте внутри него файл .git / info / attribute с
**. ipynb filter =
как содержание. Понятно, что таким же образом можно сделать и обратное: включить фильтрацию только для определенного репозитория.
код теперь поддерживается в собственном git-репо
если приведенные выше инструкции приводят к ImportErrors, попробуйте добавить «ipython» перед путем к сценарию:
РЕДАКТИРОВАТЬ : май 2016 г. (обновлено в феврале 2017 г.): у моего сценария есть несколько альтернатив - для полноты, вот список тех, кого я знаю: nbstripout ( другие варианты ), nbstrip , jq .
источник
ImportError
я должен был изменить вышеперечисленное для запуска с использованием ipython:git config --global filter.dropoutput_ipynb.clean ipython ~/bin/ipynb_output_filter.py
~/.gitattributes
других людей те же фильтры, что и у меня 2 ) Я определил регулярное выражение какworkdir/**/*.ipynb filter=dropoutput_ipynb
и помещаю большинство своих записных книжек в workdir / =>, если я все еще хочу отправить записную книжку с выводом и насладиться закладкой рендеринга в github, я просто помещаю ее вне этой папки.У нас есть совместный проект, в котором продуктом является Jupyter Notebooks, и в течение последних шести месяцев мы используем подход, который отлично работает: мы активируем сохранение
.py
файлов автоматически и отслеживаем как.ipynb
файлы, так и.py
файлы.Таким образом, если кто-то хочет просмотреть / загрузить последнюю записную книжку, он может сделать это через github или nbviewer, а если кто-то хочет увидеть, как изменился код записной книжки, он может просто посмотреть на изменения в
.py
файлах.Для
Jupyter
серверов ноутбуков это может быть достигнуто путем добавления строкв
jupyter_notebook_config.py
файл и перезапустите сервер ноутбука.Если вы не уверены, в каком каталоге найти ваш
jupyter_notebook_config.py
файл, вы можете ввести егоjupyter --config-dir
, а если вы не найдете его там, вы можете создать его, набравjupyter notebook --generate-config
.Для
Ipython 3
серверов ноутбуков это может быть достигнуто путем добавления строкв
ipython_notebook_config.py
файл и перезапустите сервер ноутбука. Эти строки взяты из ответа на вопросы github @minrk, и @dror также включает их в свой SO-ответ.Для
Ipython 2
серверов ноутбуков это можно сделать, запустив сервер с помощью:или добавив строку
в
ipython_notebook_config.py
файл и перезапустите сервер ноутбука.Если вы не уверены, в каком каталоге найти ваш
ipython_notebook_config.py
файл, вы можете ввести егоipython locate profile default
, а если вы не найдете его там, вы можете создать его, набравipython profile create
.Вот наш проект на GitHub, который использует этот подход : и вот пример GitHub для изучения последних изменений в ноутбуке .
Мы были очень счастливы с этим.
источник
--script
сработало на практике. Проблема с этим в том, что фактические ноутбуки могут быть огромными, если изображения сохраняются. Идеальное решение на этом пути может использовать что-то вроде git-annex, чтобы отслеживать только самый последний полный блокнот.--script
это устарело. ipython.org/ipython-doc/3/whatsnew/version3.htmljupyter notebook --generate-config
для создания файла конфигурации. Командаjupyter --config-dir
выясняет, в каком каталоге находятся файлы конфигурации. И фрагмент кода, данный @Rich, должен быть добавлен в файл с именемjupyter_notebook_config.py
. Остальное работает как раньше.check_call(['ipython'
сcheck_call(['jupyter'
, в противном случае вы получите предупреждение о том ,ipython nbconvert
является устаревшим , и вы должны использоватьjupyter nbconvert
вместо этого. (Jupyter v4.1.0, iPython v4.1.2)Я создал
nbstripout
на основе MinRKs gist , который поддерживает Git и Mercurial (благодаря mforbes). Он предназначен для автономного использования в командной строке или в качестве фильтра, который легко (не) устанавливается в текущий репозиторий черезnbstripout install
/nbstripout uninstall
.Получить его из PyPI или просто
источник
nbstripout
этот вариант использования не поддерживается легко, поскольку он основан на формате JSON в блокноте. Скорее всего, вам лучше написать скрипт, специализированный для вашего варианта использования.Вот новое решение от Cyrille Rossant для IPython 3.0, которое сохраняется для файлов уценки, а не файлов ipymd на основе json:
https://github.com/rossant/ipymd
источник
После нескольких лет удаления выводов в ноутбуках я попытался найти лучшее решение. Теперь я использую Jupytext , расширение для Jupyter Notebook и Jupyter Lab, которое я разработал.
Jupytext может конвертировать блокноты Jupyter в различные текстовые форматы (Scripts, Markdown и R Markdown). И наоборот. Он также предлагает возможность сопряжения записной книжки с одним из этих форматов и автоматической синхронизации двух представлений записной книжки (
.ipynb
и.md/.py/.R
файла).Позвольте мне объяснить, как Jupytext отвечает на вышеуказанные вопросы:
.md/.py/.R
Файл содержит только входные ячейки. Вы должны всегда отслеживать этот файл. Версия.ipynb
файла, только если вы хотите отслеживать результаты.Добавить
*.ipynb
в.gitignore
Выходы сохраняются в (локальном)
.ipynb
файлеРазница в файле
.py/.R
или.md
- это то, что вы ищетеВытащите последнюю версию файла
.py/.R
или.md
и обновите свой блокнот в Jupyter (Ctrl + R). Вы получите последние входные ячейки из текстового файла с соответствующими выходными данными из.ipynb
файла. На ядро это не влияет, а это значит, что ваши локальные переменные сохраняются - вы можете продолжать работать там, где оставили его.Что мне нравится в Jupytext, так это то, что блокнот (в виде файла
.py/.R
или.md
файла) можно редактировать в вашей любимой IDE. При таком подходе рефакторинг ноутбука становится легким. Когда вы закончите, вам просто нужно обновить блокнот в Jupyter.Если вы хотите попробовать это: установите Jupytext с
pip install jupytext
и перезапустите ваш Jupyter Notebook или Lab editor. Откройте записную книжку, для которой вы хотите управлять версиями, и соедините ее с файлом Markdown (или скриптом ), используя меню Jupytext в записной книжке Jupyter (или команды Jupytext в лаборатории Jupyter). Сохраните свой блокнот, и вы получите два файла: оригинал.ipynb
и обещанное текстовое представление блокнота, который идеально подходит для контроля версий!Для тех, кому это может быть интересно: Jupytext также доступен в командной строке .
источник
Наконец-то я нашел продуктивный и простой способ заставить Jupyter и Git хорошо играть вместе. Я все еще на первых шагах, но я уже думаю, что это намного лучше, чем все другие запутанные решения.
Visual Studio Code - это классный и открытый редактор исходного кода от Microsoft. Он имеет отличное расширение Python, которое теперь позволяет импортировать блокнот Jupyter в виде кода Python. Теперь вы также можете напрямую редактировать Jupyter Notebooks .
После того, как вы импортируете свой блокнот в файл Python, весь код и разметка будут вместе в обычном файле Python со специальными маркерами в комментариях. Вы можете увидеть на изображении ниже:
В вашем файле python просто есть содержимое входных ячеек ноутбука. Вывод будет создан в разделенном окне. У вас есть чистый код в блокноте, он не меняется, пока вы просто его исполняете. Нет смешанного вывода с вашим кодом. Нет странного непонятного формата JSON для анализа ваших различий.
Просто чистый код Python, где вы можете легко идентифицировать каждый отдельный diff.
Мне даже не нужно больше версии моих
.ipynb
файлов. Я могу поставить*.ipynb
строку.gitignore
.Нужно создать блокнот, чтобы опубликовать или поделиться с кем-то? Нет проблем, просто нажмите кнопку экспорта в интерактивном окне Python
Если вы редактируете записную книжку напрямую, теперь есть значок
Convert and save to a python script
.Вот скриншот ноутбука внутри кода Visual Studio:
Я использовал его всего один день, но, наконец, я могу с радостью использовать Jupyter с Git.
PS: завершение кода VSCode намного лучше, чем Jupyter.
источник
(2017-02)
стратегии
nbstripout
,)nbstripout
,)nbconvert
в python: name.ipynb.py (nbconvert
)nbconvert
,ipymd
)инструменты
nbstripout
: убрать выходные данные из записной книжкиpip install nbstripout; nbstripout install
ipynb_output_filter
: убрать выходные данные из записной книжкиipymd
: конвертировать между {Jupyter, Markdown, O'Reilly Atlas Markdown, OpenDocument, .py}nbdime
: "Инструменты для различий и слияния ноутбуков Jupyter." (2015)nbdiff
: сравните ноутбуки в терминалеnbmerge
: трехстороннее объединение ноутбуков с автоматическим разрешением конфликтовnbdiff-web
: показывает богатый рендеринг различий ноутбуковnbmerge-web
: предоставляет веб-инструмент для трехстороннего слияния для ноутбуковnbshow
: представьте один ноутбук в удобном для терминала видеисточник
Самые популярные ответы 2016 года - это непоследовательные хаки по сравнению с лучшим способом сделать это в 2019 году.
Существует несколько вариантов, лучший из которых ответ на вопрос - Jupytext.
Jupytext
Поймайте статью «Наука о данных» на Jupytext
Как это работает с контролем версий, вы помещаете файлы .py и .ipynb в систему контроля версий. Посмотрите на .py, если вам нужен входной diff, посмотрите на .ipynb, если вы хотите последний обработанный вывод.
Примечательные упоминания: VS studio, nbconvert, nbdime, водород
Я думаю, что немного потрудившись, VS studio и / или водород (или аналогичные) станут доминирующими игроками в решении этого рабочего процесса.
источник
Просто попадайтесь на «jupytext», который выглядит как идеальное решение. Он генерирует файл .py из записной книжки, а затем синхронизирует оба файла. Вы можете управлять версиями, различать и объединять входные данные через файл .py без потери выходных данных. Когда вы открываете записную книжку, он использует .py для входных ячеек и .ipynb для вывода. И если вы хотите включить вывод в git, то вы можете просто добавить ipynb.
https://github.com/mwouts/jupytext
источник
Поскольку существует очень много стратегий и инструментов для управления версиями для ноутбуков, я попытался создать блок-схему, чтобы выбрать подходящую стратегию (создано в апреле 2019 г.)
источник
Как указывается,
--script
является устаревшим в3.x
. Этот подход можно использовать, применив post-save-hook. В частности, добавьте следующееipython_notebook_config.py
:Код взят из # 8009 .
источник
.py
файла в записную книжку проблематичен, поэтому, к сожалению, это не полное решение. (Я бы хотел, чтобы это было так, как.py
--script
поведения независимо от контроля версий. Сначала у меня были некоторые проблемы, так что на всякий случай я могу сэкономить время: 1) Еслиipython_notebook_config.py
файл отсутствует в папке профиля, запустите егоipython profile create
для генерации. 2) Если кажется, что post-save-hook игнорируется, запустите ipython with--debug
для диагностики проблемы. 3) Если сценарий с ошибкойImportError: No module named mistune
- просто установить minstue:pip install mistune
.К сожалению, я мало что знаю о Mercurial, но я могу дать вам возможное решение, которое работает с Git, в надежде, что вы сможете перевести мои команды Git в их эквиваленты Mercurial.
Для фона, в Git
add
команда сохраняет изменения, внесенные в файл, в промежуточную область. После того, как вы это сделаете, все последующие изменения в файле будут игнорироваться Git, если вы не скажете ему, чтобы они тоже были в стадии разработки. Следовательно, следующий сценарий, который для каждого из заданных файлов удаляет всеoutputs
иprompt_number sections
, распаковывает извлеченный файл и восстанавливает исходный:ПРИМЕЧАНИЕ. Если вы запустили это сообщение об ошибке, например
ImportError: No module named IPython.nbformat
, используйтеipython
вместо запуска используйте сценарийpython
.После запуска сценария для файлов, изменения которых вы хотите зафиксировать, просто запустите
git commit
.источник
.clean
расширением. К сожалению, я не мог понять, как это сделать без непосредственного изменения IPython (хотя это изменение было довольно тривиальным). Я поиграю с этим некоторое время и посмотрю, подходит ли оно всем моим потребностям.Я использую очень прагматичный подход; которые хорошо работают для нескольких ноутбуков, с нескольких сторон. И это даже позволяет мне «переносить» ноутбуки вокруг. Он работает как для Windows, так и для Unix / MacOS.
Аль думал, что это просто, это решить проблемы выше ...
концепция
По сути, не отслеживайте
.ipnyb
-файлы, только соответствующие.py
-файлы.Запуская ноутбук-сервер с
--script
опцией, этот файл автоматически создается / сохраняется при сохранении ноутбука.Эти
.py
-файлы содержат все входные данные; не-код сохраняется в комментариях, как и границы ячеек. Эти файлы могут быть прочитаны / импортированы (и перетащены) на ноутбук-сервер для (пере) создания блокнота. Только выход ушел; пока не будет повторного запуска.Лично я использую Mercurial для отслеживания версий
.py
файлов; и используйте обычные (командная строка) команды для добавления, регистрации (ect) для этого. Большинство других (D) VCS позволит это сделать.Теперь легко отслеживать историю;
.py
маленькие, текстовые и просто дифф. Время от времени нам нужен клон (просто ветвь; запустите там 2-й блокнот) или более старую версию (извлечение и импорт в ноутбук-сервер) и т. Д.Советы и хитрости
--script
опцией) и выполните его отслеживание версий.py
-файл, но не регистрирует его.Пожелания
file@date+rev.py
) должно быть полезным. Было бы много работы, чтобы добавить это; и, возможно, я сделаю это один раз. До сих пор я просто делаю это вручную.источник
.py
файла обратно в записную книжку? Мне нравится такой подход, но, поскольку.ipynb
->.py
->.ipynb
потенциально с потерями, я не рассматривал это всерьез..py
к.ipynb
форматам. Есть проблема по этому поводу - так что, возможно, это послужит основой для полного решения..py
файлов в.ipynb
файлы.nbconvert
кажется, еще не поддерживает это, и у меня нет приборной панели ноутбука, так как я запускаюipython notebook
вручную. Есть ли у вас какие-либо общие предложения о том, как реализовать это обратное преобразование?.py
трансформация в ноутбук не предназначена для передачи туда и обратно. Так что это не может быть общим решением, хотя приятно, что оно работает для вас.Чтобы продолжить работу над отличным сценарием Пьетро Баттистона, если вы получите ошибку разбора Unicode, подобную этой:
Вы можете добавить в начале сценария:
источник
Я построил пакет Python, который решает эту проблему
https://github.com/brookisme/gitnb
Он предоставляет интерфейс командной строки с git-вдохновленным синтаксисом для отслеживания / обновления / сравнения записных книжек внутри вашего git-репо.
Вот пример
Обратите внимание, что последний шаг, где я использую «gitnb commit» - это фиксация вашего git-репо. По сути, это обертка для
Есть еще несколько методов, и их можно настроить так, чтобы на каждом этапе требовалось больше или меньше пользовательского ввода, но это общая идея.
источник
Покопавшись, я, наконец, нашел этот относительно простой способ предварительного сохранения документации Jupyter . Он удаляет выходные данные ячейки. Вы должны вставить его в
jupyter_notebook_config.py
файл (см. Инструкции ниже).Из ответа Рича Синьелла :
источник
Я сделал то, что сделал Альберт и Рич, - не создавал версии файлов .ipynb (так как они могут содержать изображения, которые становятся грязными). Вместо этого всегда запускайте
ipython notebook --script
илиc.FileNotebookManager.save_script = True
сохраняйте.py
файл конфигурации, чтобы при сохранении записной книжки всегда создавался (изменяемый) файл.Чтобы восстановить блокноты (после проверки репо или переключения ветки) я поместил скрипт py_file_to_notebooks.py в каталог, где я храню свои блокноты.
Теперь, после проверки репо, просто запустите
python py_file_to_notebooks.py
для генерации файлов ipynb. После переключения ветки может потребоваться запуститьpython py_file_to_notebooks.py -ov
перезаписать существующие файлы ipynb.Просто чтобы быть в безопасности, это хорошо, чтобы добавить
*.ipynb
в свой.gitignore
файл.Редактировать: я больше не делаю этого, потому что (A) вам приходится восстанавливать свои записные книжки из py-файлов каждый раз, когда вы извлекаете ветку, и (B) есть другие вещи, такие как уценка в записных книжках, которые вы теряете. Я вместо этого удаляю вывод из ноутбуков, используя git-фильтр. Обсуждение того, как это сделать, здесь .
источник
.py
файлов обратно в.ipynb
проблематично, особенно с ноутбуками версии 4, для которых еще нет конвертера. В настоящее время нужно будет использовать импортер v3, а затем конвертировать в v4, и я немного обеспокоен этой сложной поездкой. Кроме того,.py
файл не очень хороший выбор, если в записной книжке используется в основном код Джулии! Наконец,--script
устарела, так что я думаю, что крючки - это путь.Итак, похоже, что текущее лучшее решение, согласно обсуждению здесь , состоит в том, чтобы сделать git-фильтр для автоматического удаления выходных данных из файлов ipynb при фиксации.
Вот что я сделал, чтобы заставить это работать (скопировано из того обсуждения):
Я слегка измененный файл nbstripout cfriedline, чтобы дать информативное сообщение об ошибке , когда вы не можете импортировать последнюю IPython: https://github.com/petered/plato/blob/fb2f4e252f50c79768920d0e47b870a8d799e92b/notebooks/config/strip_notebook_output И добавил его к моему репо, позволяет скажем в
./relative/path/to/strip_notebook_output
Также добавлен файл .gitattributes в корень репо, содержащий:
И создал
setup_git_filters.sh
содержащийИ побежал
source setup_git_filters.sh
. Причудливая функция $ (git rev-parse ...) - найти локальный путь вашего репо на любом (Unix) компьютере.источник
Это расширение Jupyter позволяет пользователям загружать ноутбуки Jupyter непосредственно на GitHub.
Пожалуйста, посмотрите здесь
https://github.com/sat28/githubcommit
источник
Это апрель-2020, и есть много стратегий и инструментов для контроля версий ноутбуков Jupyter. Вот краткий обзор всех инструментов, которые вы можете использовать,
nbdime - отлично подходит для локального сравнения и объединения ноутбуков
nbstripout - фильтр git для автоматического удаления выходных данных ноутбука перед каждым коммитом
jupytext - сохраняет сопутствующий файл .py для каждой записной книжки. Вы фиксируете только файлы .py
nbconvert - конвертирует записные книжки в скрипт Python или HTML (или оба) и фиксирует эти альтернативные типы файлов
ReviewNB - показывает разность записной книжки (вместе с выводом) для любого запроса на фиксацию или извлечение на GitHub. Можно также написать комментарии к ячейкам блокнота, чтобы обсудить изменения (скриншот ниже).
Отказ от ответственности: я построил ReviewNB.
источник
Как насчет идеи, обсуждаемой в посте ниже, где следует сохранять выходные данные записной книжки с аргументом, что ее генерация может занять много времени, и это удобно, поскольку GitHub теперь может отображать записные книжки. Для экспорта .py-файла добавлены хуки автосохранения, используемые для diff-файлов и .html для обмена с членами команды, которые не используют блокноты или git.
https://towardsdatascience.com/version-control-for-jupyter-notebook-3e6cef13392d
источник