Cada vez que ejecuto IPython Notebook, el primer comando que ejecuto es
%matplotlib inline
¿Hay alguna forma de cambiar mi archivo de configuración para que cuando inicie IPython, esté automáticamente en este modo?
Cada vez que ejecuto IPython Notebook, el primer comando que ejecuto es
%matplotlib inline
¿Hay alguna forma de cambiar mi archivo de configuración para que cuando inicie IPython, esté automáticamente en este modo?
ipython --matplotlib
es mejor
Respuestas:
IPython tiene perfiles para la configuración, ubicados en ~/.ipython/profile_*
. Se llama al perfil predeterminado profile_default
. Dentro de esta carpeta hay dos archivos de configuración principales:
ipython_config.py
ipython_kernel_config.py
Agregue la opción en línea para matplotlib a ipython_kernel_config.py
:
c = get_config()
# ... Any other configurables you want to set
c.InteractiveShellApp.matplotlib = "inline"
%pylab
Se desaconseja el uso de para obtener un trazado en línea .
Introduce todo tipo de suciedad en su espacio de nombres que simplemente no necesita.
%matplotlib
por otro lado, permite el trazado en línea sin inyectar su espacio de nombres. Deberá hacer llamadas explícitas para obtener matplotlib y numpy importados.
import matplotlib.pyplot as plt
import numpy as np
El pequeño precio de escribir sus importaciones explícitamente debería superarse por completo por el hecho de que ahora tiene un código reproducible.
%matplotlib
o si ambos configuraban el backend predeterminado y lo configuraban automáticamente para su uso inmediato en el Entorno iPython.
matplotlib
vs pylab
, iPython hace que sea muy fácil ejecutar automáticamente código arbitrario de Python cada vez que inicie usando Perfiles. Creo que es bastante común tener un perfil donde automáticamente haces importaciones comunes como import numpy as np; import pandas as pd; import matplotlib.pyplot as plt
, etc. NB: nopylab
es lo mismo que pyplot
. Me debe haber tomado un mes darme cuenta de eso.
ipython_kernel_config.py
, que contiene esta opción. Cree un nuevo perfil ( ipython profile create test
) para obtener un perfil predeterminado.
c.InteractiveShellApp.matplotlib = "inline"
Creo que lo que desea podría ser ejecutar lo siguiente desde la línea de comando:
ipython notebook --matplotlib=inline
Si no le gusta escribirlo en la línea cmd cada vez, puede crear un alias para hacerlo por usted.
--matplotlib inline
y elimine el elemento --pylab. Vea esta publicación de un desarrollo de ipython por qué: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
matplotlib=inline
: Ralentizará cada kernel que inicie, independientemente de si desea usar matplotlib.
--matplotlib
o --pylab
se ignoran.
%pylab
o en su %matplotlib
lugar.
La configuración se deshabilitó en Jupyter 5.X
y superior agregando el siguiente código
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)
Y en versiones anteriores ha sido principalmente una advertencia. Pero este no es un gran problema porque Jupyter usa conceptos dekernels
y puede encontrar el kernel para su proyecto ejecutando el siguiente comando
$ jupyter kernelspec list
Available kernels:
python3 /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3
Esto me da la ruta a la carpeta del kernel. Ahora si abro el/Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.json
archivo, veo algo como a continuación
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
],
"display_name": "Python 3",
"language": "python"
}
Entonces puede ver qué comando se ejecuta para iniciar el kernel. Entonces, si ejecuta el siguiente comando
$ 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`
Así que ahora, si actualizamos nuestro kernel.json
archivo a
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
"--pylab",
"inline"
],
"display_name": "Python 3",
"language": "python"
}
Y si ejecuto jupyter notebook
los gráficos seinline
Tenga en cuenta que el enfoque a continuación también funciona, donde crea un archivo en la ruta a continuación
~ / .ipython / profile_default / ipython_kernel_config.py
c = get_config()
c.IPKernelApp.matplotlib = 'inline'
Pero la desventaja de este enfoque es que se trata de un impacto global en todos los entornos que utilizan Python. También puede considerarlo como una ventaja si desea tener un comportamiento común en todos los entornos con un solo cambio.
Así que elija el enfoque que le gustaría utilizar en función de sus necesidades.
En su ipython_config.py
archivo, busque las siguientes líneas
# c.InteractiveShellApp.matplotlib = None
y
# c.InteractiveShellApp.pylab = None
y descomentarlos. Luego, cambie None
al backend que está usando (yo uso 'qt4'
) y guarde el archivo. Reinicie IPython y se deben cargar matplotlib y pylab; puede usar el dir()
comando para verificar qué módulos están en el espacio de nombres global.
Además de @Kyle Kelley y @DGrady, aquí está la entrada que se puede encontrar en el
$HOME/.ipython/profile_default/ipython_kernel_config.py
(o el perfil que haya creado)
Cambio
# Configure matplotlib for interactive use with the default matplotlib backend.
# c.IPKernelApp.matplotlib = none
a
# Configure matplotlib for interactive use with the default matplotlib backend.
c.IPKernelApp.matplotlib = 'inline'
Esto luego funcionará tanto en ipython qtconsole como en sesiones de notebook.