Chaque fois que je lance IPython Notebook, la première commande que j'exécute est
%matplotlib inline
Existe-t-il un moyen de modifier mon fichier de configuration afin que lorsque je lance IPython, il soit automatiquement dans ce mode?
Chaque fois que je lance IPython Notebook, la première commande que j'exécute est
%matplotlib inline
Existe-t-il un moyen de modifier mon fichier de configuration afin que lorsque je lance IPython, il soit automatiquement dans ce mode?
ipython --matplotlib
est mieux
Réponses:
IPython a des profils pour la configuration, situés à ~/.ipython/profile_*
. Le profil par défaut est appelé profile_default
. Dans ce dossier, il y a 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 le traçage en ligne est déconseillée .
Il introduit toutes sortes de saletés dans votre espace de noms dont vous n'avez tout simplement pas besoin.
%matplotlib
d'autre part, permet le traçage en ligne sans injecter votre espace de noms. Vous devrez faire des appels explicites pour importer matplotlib et numpy.
import matplotlib.pyplot as plt
import numpy as np
Le petit prix de la saisie explicite de vos importations doit être complètement surmonté par le fait que vous disposez désormais d'un code reproductible.
%matplotlib
ou s'il définissait à la fois le backend par défaut et le configurait automatiquement pour une utilisation immédiate dans le Environnement iPython.
matplotlib
vs pylab
, iPython facilite très facilement l'exécution automatique de code python arbitraire chaque fois que vous lancez à l'aide de Profiles. Je pense qu'il est assez courant d'avoir un profil où l'on fait automatiquement des importations courantes comme import numpy as np; import pandas as pd; import matplotlib.pyplot as plt
, etc. NB: ce pylab
n'est pas la même chose que pyplot
. Il m'a fallu un mois pour m'en rendre compte.
ipython_kernel_config.py
, qui contient cette option. Créez un nouveau profil ( ipython profile create test
) pour obtenir une valeur par défaut.
c.InteractiveShellApp.matplotlib = "inline"
Je pense que vous voulez peut-être exécuter ce qui suit à partir de la ligne de commande:
ipython notebook --matplotlib=inline
Si vous n'aimez pas le taper à chaque fois sur la ligne cmd, vous pouvez créer un alias pour le faire à votre place.
--matplotlib inline
et supprimer le contenu --pylab. Voir ce post d'un ipython devel pourquoi: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
matplotlib=inline
: cela ralentira chaque noyau que vous lancerez, que vous souhaitiez ou non utiliser matplotlib.
--matplotlib
ou --pylab
sont ignorées.
%pylab
ou à la %matplotlib
place.
Le paramètre a été désactivé dans Jupyter 5.X
et plus 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 principalement d'un avertissement. Mais ce n'est pas un gros problème car Jupyter utilise des concepts de kernels
et vous pouvez trouver le noyau pour 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 vers le dossier du noyau. Maintenant, si j'ouvre le /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.json
fichier, je vois quelque chose comme ci-dessous
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
],
"display_name": "Python 3",
"language": "python"
}
Ainsi, vous pouvez 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 kernel.json
fichier
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
"--pylab",
"inline"
],
"display_name": "Python 3",
"language": "python"
}
Et si je lance jupyter notebook
les graphiques sont automatiquementinline
Notez que l'approche ci-dessous fonctionne également, où vous créez 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 chaque environnement utilisant python. Vous pouvez également considérer cela comme un avantage si vous souhaitez avoir un comportement commun dans tous les environnements avec un seul changement.
Choisissez donc l'approche que vous souhaitez utiliser en fonction de vos besoins
Dans votre ipython_config.py
fichier, recherchez les lignes suivantes
# c.InteractiveShellApp.matplotlib = None
et
# c.InteractiveShellApp.pylab = None
et décommentez-les. Ensuite, None
passez au backend 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 dir()
commande pour vérifier quels modules se trouvent dans l'espace de noms global.
Suite à @Kyle Kelley et @DGrady, voici l'entrée qui se trouve dans le
$HOME/.ipython/profile_default/ipython_kernel_config.py
(ou quel que soit 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.