Como executar um .ipynb Jupyter Notebook no terminal?

159

Eu tenho algum código em um arquivo .ipynb e cheguei ao ponto em que realmente não preciso do recurso "interativo" do IPython Notebook. Gostaria de executá-lo diretamente de uma linha de comando do Mac Terminal.

Basicamente, se este fosse apenas um arquivo .py, acredito que poderia fazer python filename.py na linha de comando. Existe algo semelhante para um arquivo .ipynb?

Vincent
fonte
Algo assim: github.com/paulgb/runipy ?
Idjaw 22/02
Algo parecido. Tenho algumas inputdeclarações em meu caderno ipython, e parece ter problemas com estes
Vincent

Respostas:

107

Na linha de comando, você pode converter um notebook em python com este comando:

jupyter nbconvert --to python nb.ipynb

https://github.com/jupyter/nbconvert

Pode ser necessário instalar o pacote python mistune :

sudo pip install -U mistune
ditkin
fonte
14
Subcomando ipython nbconverté depreciado em favor do nbconvert jupyter
PenguinEngineer
6
Não acho que essa resposta esteja correta. Sei que funciona, mas a questão é como executar .ipynb no terminal, não como convertê-lo em um .py e depois executá-lo.
Giacomo
3
Nbconvert falhará se qualquer célula demorar mais de 30 segundos para executar, você pode adicionar --ExecutePreprocessor.timeout=600.
precisa saber é o seguinte
As atualizações mais recentes faz com que funcione como este, você recebe um HTML o arquivo notebookjupyter-nbconvert --execute 03-Print\ Formatting\ with\ Strings.ipynb
b-ak
160

O nbconvert permite executar notebooks com a --executebandeira:

jupyter nbconvert --execute <notebook>

Se você deseja executar um notebook e produzir um novo notebook, você pode adicionar --to notebook:

jupyter nbconvert --execute --to notebook <notebook>

Ou se você deseja substituir o notebook existente pela nova saída:

jupyter nbconvert --execute --to notebook --inplace <notebook>

Como esse é um comando muito longo, você pode usar um alias:

alias nbx="jupyter nbconvert --execute --to notebook"
nbx [--inplace] <notebook>
minrk
fonte
1
Isso não parece trabalho por trás Conda ambiente virtual
Ramesh-X
9
Isso transforma o notebook em uma página HTML estático
Jim Daniël Teunis
3
A documentação ou esta e as formas programáticas de execução de notebooks podem ser encontradas em nbconvert.readthedocs.io/en/latest/… #
TomDotTom 5/19/19
Existe uma maneira de especificar quais células executar? Por exemplo célula 10 e tudo abaixo, ou uma célula de alcance 10 para a célula 20.
Al Conrad
2
Além disso, se você tiver células de execução longa, poderá definir --ExecutePreprocessor.timeout=[timeout_in_seconds] (use -1sem restrições).
Zaccharie Ramzi
38

Você pode exportar todo o seu código .ipynbe salvá-lo como um .pyscript. Então você pode executar o script no seu terminal.

amostra de exportação de código

Espero que ajude.

pdm
fonte
Esta resposta (y)
ColinMac
3
não responde à pergunta original
baxx 25/02
14

No seu Terminal, execute o ipython:

ipython

então localize seu script e coloque lá:

%run your_script.ipynb
Martin Ptacek
fonte
como isso pode ser colocado em um shell script
baxx 25/02
1
Esta é a resposta mais prática.
Ed Williams
10

Para nova versão em vez de:

ipython nbconvert --to python <YourNotebook>.ipynb

Você pode usar o jupyter instend do ipython:

jupyter nbconvert --to python <YourNotebook>.ipynb
Vijay Panchal
fonte
como isso é uma resposta para a pergunta?
baxx 25/02
4

Atualize com comentários citados pelo autor para obter melhor visibilidade:

Nota do autor "Este projeto foi iniciado antes da API de execução do Jupyter, que agora é a maneira recomendada de executar blocos de anotações na linha de comando. Considere o runipy descontinuado e sem manutenção". - Sebastian Palma

Instale a biblioteca runipy que permite executar seu código no terminal

pip install runipy

Depois de compilar seu código:

runipy <YourNotebookName>.ipynb

Você pode tentar o cronjob também. Toda a informação está aqui

Eixo
fonte
11
Nota do autor "Este projeto foi iniciado antes da API de execução do Jupyter, que agora é a maneira recomendada de executar blocos de anotações na linha de comando. Considere o runipy descontinuado e sem manutenção".
Sebastian Palma
3

No meu caso, o comando que melhor me convinha foi:

jupyter nbconvert --execute --clear-output <notebook>.ipynb

Por quê? Este comando não cria arquivos extras (como um .pyarquivo) e a saída das células é substituída toda vez que o notebook é executado.

Se você executar:

jupyter nbconvert --help

--clear-output Limpa a saída do arquivo atual e salva no lugar, substituindo o notebook existente.

alejandro
fonte
0

Você também pode usar o boarpacote para executar seu notebook em um código python.

from boar.running import run_notebook

outputs = run_notebook("nb.ipynb")

Se você atualizar seu notebook, não precisará convertê-lo novamente em um arquivo python.


Mais informações em:

https://github.com/alexandreCameron/boar/blob/master/USAGE.md

Alex
fonte
0

A partir do terminal

jupyter nbconvert --execute --to notebook --inplace --allow-errors --ExecutePreprocessor.timeout=-1 my_nb.ipynb

O tempo limite padrão é 30 segundos. -1 remove a restrição.

Se desejar salvar o notebook de saída em um novo notebook, use a bandeira --output my_new_nb.ipynb

Mohammad S
fonte
0

Eu tive o mesmo problema e encontrei a fábrica de papel . As vantagens em relação às outras soluções é que você pode ver os resultados enquanto o notebook está em execução. Acho esse recurso interessante quando o notebook demora muito. É muito fácil de usar:

pip install papermill
papermill notebook.ipynb output.ipynb

Ele também possui outras opções úteis, como salvar o arquivo de saída no Amazon S3, Google Cloud, etc. Consulte a página para obter mais informações.

pglez82
fonte