Chaque fois que je lance IPython Notebook, la première commande que je lance est
%matplotlib inline
Existe-t-il un moyen de changer mon fichier de configuration de sorte que lorsque je lance IPython, il se trouve automatiquement dans ce mode?
IPython possède des profils de configuration situés à l'adresse ~/.ipython/profile_*
. Le profil par défaut s'appelle profile_default
. Ce dossier contient deux fichiers de configuration principaux:
ipython_config.py
ipython_kernel_config.py
Ajoutez l'option en ligne pour matplotlib à ipython_kernel_config.py
:
c = get_config()
# ... Any other configurables you want to set
c.InteractiveShellApp.matplotlib = "inline"
L'utilisation de %pylab
pour obtenir un tracé en ligne est déconseillée .
Il introduit toutes sortes de déchets dans votre espace de noms dont vous n'avez simplement pas besoin.
%matplotlib
permet en revanche un tracé en ligne sans injecter votre espace de noms. Vous aurez besoin de faire des appels explicites pour importer matplotlib et numpy.
import matplotlib.pyplot as plt
import numpy as np
Le faible prix de la saisie explicite de vos importations doit être complètement dépassé par le fait que vous disposez désormais d'un code reproductible.
Je pense que ce que vous voulez peut-être être d'exécuter ce qui suit à partir de la ligne de commande:
ipython notebook --matplotlib=inline
Si vous n'aimez pas le taper à la ligne cmd à chaque fois, vous pouvez créer un alias pour le faire pour vous.
Le paramètre a été désactivé dans Jupyter 5.X
et versions ultérieures en ajoutant le code ci-dessous.
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)
Et dans les versions précédentes, il s’agissait surtout d’un avertissement. Mais ce n’est pas un gros problème car Jupyter utilise les concepts de kernels
et vous pouvez trouver le noyau de votre projet en exécutant la commande ci-dessous.
$ jupyter kernelspec list
Available kernels:
python3 /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3
Cela me donne le chemin du dossier du noyau. Maintenant, si j'ouvre le fichier /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.json
, je vois quelque chose comme ci-dessous
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
],
"display_name": "Python 3",
"language": "python"
}
Vous pouvez ainsi voir quelle commande est exécutée pour lancer le noyau. Donc, si vous exécutez la commande ci-dessous
$ 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`
Alors maintenant, si nous mettons à jour notre fichier kernel.json
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
"--pylab",
"inline"
],
"display_name": "Python 3",
"language": "python"
}
Et si je lance jupyter notebook
les graphes sont automatiquement inline
Notez que l'approche ci-dessous fonctionne également, vous pouvez créer un fichier sur le chemin ci-dessous.
~/.ipython/profile_default/ipython_kernel_config.py
c = get_config()
c.IPKernelApp.matplotlib = 'inline'
Mais l'inconvénient de cette approche est qu'il s'agit d'un impact global sur tous les environnements utilisant Python. Vous pouvez considérer cela comme un avantage également si vous souhaitez avoir un comportement commun dans les environnements avec un seul changement.
Alors choisissez quelle approche vous souhaitez utiliser en fonction de vos besoins
Dans votre fichier ipython_config.py
, recherchez les lignes suivantes
# c.InteractiveShellApp.matplotlib = None
et
# c.InteractiveShellApp.pylab = None
et décommentez-les. Ensuite, remplacez None
par le système que vous utilisez (j’utilise 'qt4'
) et enregistrez le fichier. Redémarrez IPython, et matplotlib et pylab doivent être chargés. Vous pouvez utiliser la commande dir()
pour vérifier quels modules se trouvent dans l'espace de noms global.
Dans (l'actuel) IPython 3.2.0 (Python 2 ou 3)
Ouvrez le fichier de configuration dans le dossier caché .ipython
~/.ipython/profile_default/ipython_kernel_config.py
ajouter la ligne suivante
c.IPKernelApp.matplotlib = 'inline'
ajoutez-le tout de suite après
c = get_config()
Suite à @Kyle Kelley et @DGrady, voici l’entrée que vous pouvez trouver dans le
$HOME/.ipython/profile_default/ipython_kernel_config.py
(ou le profil que vous avez créé)
Changement
# Configure matplotlib for interactive use with the default matplotlib backend.
# c.IPKernelApp.matplotlib = none
à
# Configure matplotlib for interactive use with the default matplotlib backend.
c.IPKernelApp.matplotlib = 'inline'
Cela fonctionnera ensuite dans les sessions ipython qtconsole et notebook.