Ogni volta che avvio IPython Notebook, il primo comando che eseguo è
%matplotlib inline
C'è un modo per modificare il mio file di configurazione in modo che quando avvio IPython, sia automaticamente in questa modalità?
Ogni volta che avvio IPython Notebook, il primo comando che eseguo è
%matplotlib inline
C'è un modo per modificare il mio file di configurazione in modo che quando avvio IPython, sia automaticamente in questa modalità?
ipython --matplotlib
è meglio
Risposte:
IPython ha profili per la configurazione, che si trovano in ~/.ipython/profile_*
. Viene chiamato il profilo predefinito profile_default
. All'interno di questa cartella sono presenti due file di configurazione principali:
ipython_config.py
ipython_kernel_config.py
Aggiungi l'opzione inline per matplotlib a ipython_kernel_config.py
:
c = get_config()
# ... Any other configurables you want to set
c.InteractiveShellApp.matplotlib = "inline"
L'utilizzo di %pylab
per ottenere la stampa in linea è sconsigliato .
Introduce tutti i tipi di gunk nel tuo spazio dei nomi di cui non hai bisogno.
%matplotlib
d'altra parte abilita la stampa in linea senza iniettare il tuo spazio dei nomi. Dovrai eseguire chiamate esplicite per importare matplotlib e numpy.
import matplotlib.pyplot as plt
import numpy as np
Il piccolo prezzo di digitare esplicitamente le tue importazioni dovrebbe essere completamente superato dal fatto che ora hai un codice riproducibile.
%matplotlib
o se impostasse il backend predefinito e lo configurasse automaticamente per l'uso immediatamente nel Ambiente iPython.
matplotlib
vs pylab
, iPython rende molto semplice eseguire automaticamente codice Python arbitrario ogni volta che si avvia utilizzando Profili. Credo sia abbastanza comune avere un profilo in cui esegui automaticamente importazioni comuni come import numpy as np; import pandas as pd; import matplotlib.pyplot as plt
, ecc. NB: nonpylab
è la stessa cosa di . Devo aver impiegato un mese per rendermene conto. pyplot
ipython_kernel_config.py
che contiene questa opzione. Crea un nuovo profilo ( ipython profile create test
) per ottenere quello predefinito.
c.InteractiveShellApp.matplotlib = "inline"
Penso che quello che vuoi potrebbe essere eseguire quanto segue dalla riga di comando:
ipython notebook --matplotlib=inline
Se non ti piace scriverlo ogni volta sulla riga cmd, puoi creare un alias per farlo per te.
--matplotlib inline
e rimuovi il contenuto di --pylab. Vedi questo post di uno sviluppo di ipython perché: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
matplotlib=inline
: rallenterà ogni kernel che avvii, indipendentemente dal fatto che tu voglia usare matplotlib.
--matplotlib
o --pylab
vengono ignorate.
%pylab
o %matplotlib
invece.
L'impostazione è stata disabilitata in Jupyter 5.X
e superiori aggiungendo il codice sottostante
pylab = Unicode('disabled', config=True,
help=_("""
DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.
""")
)
@observe('pylab')
def _update_pylab(self, change):
"""when --pylab is specified, display a warning and exit"""
if change['new'] != 'warn':
backend = ' %s' % change['new']
else:
backend = ''
self.log.error(_("Support for specifying --pylab on the command line has been removed."))
self.log.error(
_("Please use `%pylab{0}` or `%matplotlib{0}` in the notebook itself.").format(backend)
)
self.exit(1)
E nelle versioni precedenti è stato principalmente un avvertimento. Ma questo non è un grosso problema perché Jupyter utilizza i concetti di kernels
e puoi trovare il kernel per il tuo progetto eseguendo il comando sotto
$ jupyter kernelspec list
Available kernels:
python3 /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3
Questo mi dà il percorso della cartella del kernel. Ora se apro il /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.json
file, vedo qualcosa di simile sotto
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
],
"display_name": "Python 3",
"language": "python"
}
Quindi puoi vedere quale comando viene eseguito per avviare il kernel. Quindi, se esegui il comando seguente
$ python -m ipykernel_launcher --help
IPython: an enhanced interactive Python shell.
Subcommands
-----------
Subcommands are launched as `ipython-kernel cmd [args]`. For information on
using subcommand 'cmd', do: `ipython-kernel cmd -h`.
install
Install the IPython kernel
Options
-------
Arguments that take values are actually convenience aliases to full
Configurables, whose aliases are listed on the help line. For more information
on full configurables, see '--help-all'.
....
--pylab=<CaselessStrEnum> (InteractiveShellApp.pylab)
Default: None
Choices: ['auto', 'agg', 'gtk', 'gtk3', 'inline', 'ipympl', 'nbagg', 'notebook', 'osx', 'pdf', 'ps', 'qt', 'qt4', 'qt5', 'svg', 'tk', 'widget', 'wx']
Pre-load matplotlib and numpy for interactive use, selecting a particular
matplotlib backend and loop integration.
--matplotlib=<CaselessStrEnum> (InteractiveShellApp.matplotlib)
Default: None
Choices: ['auto', 'agg', 'gtk', 'gtk3', 'inline', 'ipympl', 'nbagg', 'notebook', 'osx', 'pdf', 'ps', 'qt', 'qt4', 'qt5', 'svg', 'tk', 'widget', 'wx']
Configure matplotlib for interactive use with the default matplotlib
backend.
...
To see all available configurables, use `--help-all`
Quindi ora se aggiorniamo il nostro kernel.json
file in
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
"--pylab",
"inline"
],
"display_name": "Python 3",
"language": "python"
}
E se eseguo jupyter notebook
i grafici vengono automaticamenteinline
Nota anche l'approccio seguente funziona ancora, dove crei un file nel percorso sottostante
~ / .ipython / profile_default / ipython_kernel_config.py
c = get_config()
c.IPKernelApp.matplotlib = 'inline'
Ma lo svantaggio di questo approccio è che si tratta di un impatto globale su ogni ambiente che utilizza Python. Puoi considerarlo un vantaggio anche se vuoi avere un comportamento comune tra gli ambienti con una singola modifica.
Quindi scegli quale approccio desideri utilizzare in base alle tue esigenze
Nel tuo ipython_config.py
file, cerca le seguenti righe
# c.InteractiveShellApp.matplotlib = None
e
# c.InteractiveShellApp.pylab = None
e rimuoverli. Quindi, None
passa al backend che stai utilizzando (io uso 'qt4'
) e salva il file. Riavvia IPython e matplotlib e pylab dovrebbero essere caricati: puoi usare il dir()
comando per verificare quali moduli si trovano nello spazio dei nomi globale.
Oltre a @Kyle Kelley e @DGrady, ecco la voce che può essere trovata nel
$HOME/.ipython/profile_default/ipython_kernel_config.py
(o qualunque profilo tu abbia creato)
Modificare
# Configure matplotlib for interactive use with the default matplotlib backend.
# c.IPKernelApp.matplotlib = none
per
# Configure matplotlib for interactive use with the default matplotlib backend.
c.IPKernelApp.matplotlib = 'inline'
Questo funzionerà in entrambe le sessioni di ipython qtconsole e notebook.