Запуск ноутбука 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 Спробуйте --ExecutePreprocessor.timeout=-1 посилання
Ленна

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__текстовий візуалізацію .
akim

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 через командний рядок:

ipython notebook --pylab inline

Це дозволить запустити сервер у неінтерактивному режимі, і всі результати будуть надруковані під кодом. Потім ви можете зберегти файл .ipynb, який включає код і вихід.


Дякую за відповідь, однак я шукав більш конкретного рішення, яке не вимагало б втручання у веб-браузері, а також для закриття ядра та веб-сервера. Я відредагував питання, щоб бути більш конкретним.
davidshinn

У цьому випадку я не знаю, як діяти далі. Чи плануєте ви робити це регулярно? IPython-Notebook розроблений для інтерактивного використання в браузері, і збереження певних ipynb-файлів із командного рядка мені здається досить дивним.
ала

Так, я планую робити це дуже часто, якби це було доступно. Це було б дуже корисно в тих випадках, коли джерела даних часто змінюються, і я хочу бачити діагностичний результат використання панд з чергуванням із кодом, який він створив, саме те, що ноутбук ipython робить дуже добре. Однак, якщо у мене є багато таких типів процесів, які потрібно запускати щодня, було б краще, якщо їх можна було б виконувати пакетно, а потім я міг би дивитись на вихідні дані пізніше, ніби були створені файли журналів. Проблема стандартного ведення журналу полягає в тому, що важко розгледіти код і вихідні дані, перемежовані між собою.
davidshinn

4
Це здається мені надзвичайно корисним варіантом використання. Ви можете взяти блокнот-шаблон, трохи параметризувати його, а потім отримати повністю виконане рішення для друку, не торкаючись браузера.
holdenweb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.