Coverage for src/ensae_teaching_cs/faq/faq_jupyter.py: 47%
15 statements
« prev ^ index » next coverage.py v7.1.0, created at 2023-04-28 06:23 +0200
« prev ^ index » next coverage.py v7.1.0, created at 2023-04-28 06:23 +0200
1# -*- coding: utf-8 -*-
2"""
3@file
4@brief Quelques problèmes récurrents avec :epkg:`Jupyter`.
6"""
8from pyquickhelper.loghelper import fLOG
9from .faq_jupyter_helper import nb_open
12def notebook_path():
13 """
14 .. faqref::
15 :tag: jupyter
16 :title: Récupérer le fichier du notebook depuis le notebook
18 Voir `How to I get the current Jupyter Notebook name
19 <http://stackoverflow.com/questions/12544056/how-to-i-get-the-current-ipython-notebook-name>`_
20 Il suffit d'insérer la cellule suivante dans le notebook ::
22 %%javascript
23 var kernel = IPython.notebook.kernel;
24 var body = document.body,
25 attribs = body.attributes;
26 var command = "theNotebook = os.path.join(" + "r'"+attribs['data-project'].value+"'," +
27 "r'"+attribs['data-notebook-path'].value+"'," + "r'"+attribs['data-notebook-name'].value+"')";
28 kernel.execute(command);
30 On peut vérifier que cela fonctionne ::
32 theNotebook
33 """
34 pass
37def jupyter_convert_notebooks():
38 """
39 .. exref::
40 :title: Convertir le notebook en cours au format HTML
41 :tag: Technique
43 .. index:: conversion, html, rst
45 C'est l'objet du notebook :ref:`notebookconvertrst`.
47 .. faqref::
48 :tag: jupyter
49 :title: Comment convertir le notebook en cours au format HTML ?
51 Voir notebook :ref:`notebookconvertrst`.
53 .. faqref::
54 :tag: jupyter
55 :title: Comment ajouter un lien vers un fichier local pour le télécharger ?
57 Voir notebook :ref:`notebookconvertrst`.
58 """
59 pass
62def jupyter_get_variable(name, magic_command_instance):
63 """
64 Retrieves the value of a local variable in a notebook.
66 @param name variable name
67 @param magic_command_instance instance of `Magics <http://ipython.readthedocs.io/en/stable/api/
68 generated/IPython.core.magic.html#IPython.core.magic.Magics>`_,
69 see `Defining your own magics
70 <http://ipython.readthedocs.io/en/stable/config/custommagics.html?defining-custom-magics>`_
71 @return value
73 The function raises an exception if the context does not exists
74 or if the variable name does not value
76 .. faqref::
77 :tag: jupyter
78 :title: Accéder ou modifier une variable du notebook depuis une commande magique
80 Lorsqu'on écrit un notebook, toutes les variables qu'on crée sont
81 en quelque sorte globales puisqu'on peut y accéder depuis chaque cellule
82 mais leur périmètre est limité au notebook.
83 Lorsqu'on crée un commande magique, il est possible d'accéder à ce contexte local
84 via le membre ``self.shell.user_ns``. De cette façon, on peut accéder au contenu d'une
85 variable, le modifier ou en ajouter une.
87 ::
89 class CustomMagics(Magics):
91 @line_magic
92 def custom_cmd(self, line):
93 context = self.shell.user_ns
94 #...
95 """
96 if magic_command_instance.shell is None:
97 raise RuntimeError(
98 "no context, you probably execute this function outside a notebook")
99 if name not in magic_command_instance.shell.user_ns:
100 raise KeyError(f"variable {name} not found")
101 return magic_command_instance.shell.user_ns[name]
104def jupyter_open_notebook(filename, profile='default', fLOG=fLOG):
105 """
106 Calls @see fn nb_open, open a notebook with an existing server,
107 if no server can be found, it starts a new one
108 (and the function runs until the server is closed)
110 @param filename notebook
111 @param profile profile to use
112 @param fLOG logging function
113 @return a running server or None if not found
115 .. faqref::
116 :tag: jupyter
117 :title: Lancer le serveur de notebooks
118 :lid: i-launch_notebook-server
120 On suppose que le module :epkg:`Jupyter` a été bien installé.
121 Depuis août 2015, IPython est devenu Jupyter qui n'est pas plus automatiquement
122 associé à Python mais propose des notebooks pour de nombreux langages.
123 Il faut installer le module *jupyter* (``pip install jupyter``).
124 Plusieurs options :
126 #. Utiliser la ligne de commande usuelle : ``jupyter-notebook``.
127 Ce script (ou programme *jupyter-notebook.exe* sous Windows
128 est inclus dans le répertoire *Scripts* du répertoire d'installation.
129 Voir également `Travailler avec IPython notebook <http://www.xavierdupre.fr/blog/2014-02-24_nojs.html>`_,
130 `Open the notebook with a different browser <http://www.xavierdupre.fr/blog/2015-08-24_nojs.html>`_
131 Il est possible de créer un fichier `.bat <https://fr.wikipedia.org/wiki/.bat>`_ pour
132 automatiser la ligne de commande et l'ajouter en tant qu'icône sur le bureau.
134 #. Utiliser la fonction :func:`jupyter_open_notebook <ensae_teaching_cs.faq.faq_jupyter.jupyter_open_notebook>` ::
136 from ensae_teaching_cs.faq import jupyter_open_notebook
137 nbfile = "notebook.ipynb"
138 jupyter_open_notebook(nbfile)
140 #. Utiliser le raccourci proposé par la distribution choisi pour installer Python.
142 .. faqref::
143 :tag: jupyter
144 :title: Le notebook ne répond plus
146 On utilise les notebooks via un
147 `navigateur web <https://fr.wikipedia.org/wiki/Navigateur_web>`_
148 mais ce n'est pas lui qui exécute le code Python, c'est un serveur.
149 Ce serveur tourne soit une machine distante, soit une machine locale.
150 Il s'agit d'une fenêtre terminale où l'on peut voir des informations
151 s'afficher à chaque qu'on ouvre, qu'on ferme, qu'on enregistre un notebook.
152 Si cette fenêtre est fermée, il n'existe plus de serveur de notebook qui
153 puisse exécuter le code inclus dans le notebook. Il ne se passe plus rien,
154 les modifications sont perdues.
155 Il faut redémarrer le serveur, qu'il soit distant ou local.
156 """
157 return nb_open(filename, profile, fLOG)