Запуск записной книжки IPython / Jupyter в неинтерактивном режиме

79

Кто-нибудь знает, можно ли запустить блокнот IPython / Jupyter в неинтерактивном режиме из командной строки и .ipynbсохранить полученный файл с результатами выполнения. Если это еще не возможно, насколько сложно было бы реализовать с помощью phantomJS, что-то для включения и выключения ядра и что-то для включения и выключения веб-сервера?

Чтобы быть более конкретным, предположим, что у меня уже есть записная книжка, original.ipynbи я хочу повторно запустить все ячейки в этой записной книжке и сохранить результаты в новой записной книжке.new.ipynb , но сделать это с помощью одной единственной команды в командной строке, не требуя взаимодействия ни в браузере, ни в чтобы закрыть ядро ​​или веб-сервер, при условии, что ни одно ядро ​​или веб-сервер еще не запущены.

пример команды:

$ ipython notebook run original.ipynb --output=new.ipynb

Дэвидшин
источник

Ответы:

70

Да, это возможно и легко, это будет (в основном) в ядре IPython для 2.0, я бы посоветовал пока посмотреть на эти примеры .

[редактировать]

$ jupyter nbconvert --to notebook --execute original.ipynb --output=new.ipynb

Теперь он находится в Jupyter NbConvert. NbConvert поставляется с набором Preprocessors, которые по умолчанию отключены, два из них ( ClearOutputPreprocessorи ExecutePreprocessor) представляют интерес. Вы можете включить их в своем (локальном | глобальном) конфигурационном файле (файлах) через c.<PreprocessorName>.enabled=True(Верхний регистр, это python) или в командной строке, --ExecutePreprocessor.enabled=Trueсохранив остальную часть команды как обычно.

У --ExecutePreprocessor.enabled=Trueнего удобный --executeпсевдоним, который можно использовать в последней версии NbConvert. Это может быть в сочетании с --inplaceпри желании

Например, конвертируйте в HTML после запуска ноутбука без головы:

$ jupyter nbconvert --to=html --execute RunMe.ipynb

преобразование в PDF после удаления выходных данных

$ ipython nbconvert --to=pdf --ClearOutputPreprocessor.enabled=True RunMe.ipynb

Это (конечно) действительно работает с ядрами, отличными от python, порождая <insert-your-language-here>ядро, если вы установили --profile=<your fav profile>. Преобразование может длиться очень долго, поскольку требуется перезапуск ноутбука. Вы можете преобразовать блокнот в блокнот с--to=notebook опцией.

Существуют различные другие параметры (тайм-аут, разрешить ошибки, ...), которые, возможно, потребуется установить / отключить в зависимости от варианта использования. См. Документацию и, конечно же jupyter nbconvert --help, --help-allили nbconvert онлайн-документацию для получения дополнительной информации.

Мэтт
источник
1
Спасибо, что указали мне правильное направление. Поскольку точный код не был опубликован, я раздвоил одну из сущностей и добавил выходной код, чтобы следующий код запускал записную книжку из командной строки точно так же, как желаемый $ ipnbdocttest.py original.ipynb new.ipynb gist.github.com/davidshinn/6110231
davidshinn
3
Нет, не в IPython 2, на подходе к IPython 3
Мэтт
7
Похоже, это сейчас (Ipython 3.1.0): ipython nbconvert --to=html --execute RunMe.ipynb
patricksurry
5
@NoahR Try --ExecutePreprocessor.timeout=-1 ref
Lenna
5
Последний jupyter (4.1.0) действительно позволяет запускать записные книжки в неинтерактивном режиме, jupyter nbconvert --to notebook --execute --allow-errors notebook.ipynbвозможно, ответ можно отредактировать
mgalardini
20

Пока эта функциональность не станет частью ядра, я собрал небольшое приложение командной строки, которое делает именно то, что вы хотите. Он называется runipy, и вы можете установить его с помощью pip install runipy. Источник и ридй находятся на GitHub .

Павел
источник
runipy, похоже, не так хорошо работает для меня: он не обновляет signatureполе, и, как следствие (ну, я думаю, это следствие), ни один из моих SVG на самом деле не отображается: IPython предпочитает __repr__вместо этого отображать простой текстовый рендеринг .
аким
1

Запустите и замените исходный файл .ipunb:

jupyter nbconvert --ExecutePreprocessor.timeout=-1 --to notebook --inplace --execute original.ipynb
Руководство
источник
1

Чтобы охватить некоторые функции, такие как параллельные рабочие процессы, параметры ввода, отправка электронной почты или ввод / вывод S3 ... вы можете установить jupyter-runner

pip install jupyter-runner

Readme на github: https://github.com/omar-masmoudi/jupyter-runner

Омар
источник
-5

Вы можете просто запустить iPython-Notebook-server через командную строку:

ipython notebook --pylab inline

Это запустит сервер в неинтерактивном режиме, и весь вывод будет напечатан под кодом. Затем вы можете сохранить .ipynb-файл, который включает код и вывод.

аля
источник
Спасибо за ответ, однако я искал более конкретное решение, которое не требовало бы вмешательства в веб-браузер или закрытия ядра и веб-сервера. Я отредактировал вопрос, чтобы быть более конкретным.
davidshinn
В этом случае я не знаю, что делать дальше. Планируете ли вы делать это на регулярной основе? IPython-Notebook предназначен для интерактивного использования в браузере, и сохранение определенных файлов ipynb из командной строки кажется мне довольно странным.
ala
Да, я планирую делать это очень часто, если бы это было возможно. Это было бы очень полезно в тех случаях, когда источники данных часто меняются, и я хочу видеть диагностические результаты использования панд, чередующихся с созданным им кодом, именно то, что ipython notebook делает очень хорошо. Однако, если у меня есть много таких процессов, которые нужно запускать в день, было бы лучше, если бы они могли запускаться в пакетном режиме, а затем я мог бы просмотреть вывод позже, как если бы были созданы файлы журнала. Проблема со стандартным ведением журнала заключается в том, что трудно увидеть, как код и вывод чередуются друг с другом.
davidshinn
4
Мне это кажется удивительно полезным вариантом использования. Вы можете взять шаблон записной книжки, немного параметризовать его, а затем получить готовое для печати полностью выполненное решение, не касаясь браузера.
holdenweb 08