2013-07-28 2 views
65

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

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

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

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

ответ

55

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

[править]

Сейчас в Jupyter NbConvert. NbConvert поставляется с пучком Preprocessor s, которые по умолчанию отключены, два из них (ClearOutputPreprocessor и ExecutePreprocessor) представляют интерес. Вы можете либо включить их в свой (локальный | глобальный) конфигурационный файл (ы) с помощью c.<PreprocessorName>.enabled=True (Uppercase, то есть 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 nbconert --help и --help-all для получения дополнительной информации.

+1

Спасибо, что указал мне в правильном направлении. Поскольку точный код не был отправлен, я разветвил один из gists и добавил выходной код, чтобы следующее запустило блокнот из командной строки так же, как желаемый '' '$ ipnbdocttest.py original.ipynb new.ipynb''' https://gist.github.com/davidshinn/6110231 – davidshinn

+0

Отлично! эта функциональность будет добавлена ​​в nbconvert 2.0 с более удобным API, не стесняйтесь редактировать вики, чтобы добавить ссылку на ваш скрипт. – Matt

+1

@Matt Это сделало его в ipython 2? Если да, то как его использовать? –

-5

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

ipython notebook --pylab inline 

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

+0

Спасибо за ответ, но я искал более конкретное решение, которое не требует вмешательства в веб-браузер и не закрывает ядро ​​и веб-сервер. Я отредактировал вопрос, чтобы быть более конкретным. – davidshinn

+0

В этом случае я не знаю, как действовать. Планируете ли вы регулярно делать это? IPython-Notebook предназначен для интерактивного использования в браузере, и сохранение определенных ipynb-файлов из командной строки кажется мне довольно странным. – ala

+0

Да, я планирую делать это очень часто, если бы он был доступен. Это было бы очень полезно в случаях, когда источники данных часто меняются, и я хочу увидеть диагностический вывод из использования панд, чередующихся с кодом, который он произвел, точно, что делает ipython-ноутбук очень хорошо. Однако, если у меня есть многие из этих типов процессов для работы в день, было бы лучше, если бы они могли быть запущены, а затем я мог бы смотреть на результат позже, как если бы файлы журнала были созданы. Проблема со стандартным протоколированием состоит в том, что трудно видеть, что код и выход чередуются друг с другом. – davidshinn

20

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

+0

runipy отлично работает! – j08lue

+0

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

+0

или '' 'conda install runipy''' при использовании anaconda. – Sean

1

Чтобы скрыть некоторые функции, такие как параллельные рабочие или входных параметров, вы можете установить jupyter-Runner

pip install jupyter-runner 

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