Coverage for src/ensae_teaching_cs/faq/faq_jupyter.py: 47%

15 statements  

« prev     ^ index     » next       coverage.py v7.1.0, created at 2023-01-27 05:44 +0100

1# -*- coding: utf-8 -*- 

2""" 

3@file 

4@brief Quelques problèmes récurrents avec :epkg:`Jupyter`. 

5 

6""" 

7 

8from pyquickhelper.loghelper import fLOG 

9from .faq_jupyter_helper import nb_open 

10 

11 

12def notebook_path(): 

13 """ 

14 .. faqref:: 

15 :tag: jupyter 

16 :title: Récupérer le fichier du notebook depuis le notebook 

17 

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 :: 

21 

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); 

29 

30 On peut vérifier que cela fonctionne :: 

31 

32 theNotebook 

33 """ 

34 pass 

35 

36 

37def jupyter_convert_notebooks(): 

38 """ 

39 .. exref:: 

40 :title: Convertir le notebook en cours au format HTML 

41 :tag: Technique 

42 

43 .. index:: conversion, html, rst 

44 

45 C'est l'objet du notebook :ref:`notebookconvertrst`. 

46 

47 .. faqref:: 

48 :tag: jupyter 

49 :title: Comment convertir le notebook en cours au format HTML ? 

50 

51 Voir notebook :ref:`notebookconvertrst`. 

52 

53 .. faqref:: 

54 :tag: jupyter 

55 :title: Comment ajouter un lien vers un fichier local pour le télécharger ? 

56 

57 Voir notebook :ref:`notebookconvertrst`. 

58 """ 

59 pass 

60 

61 

62def jupyter_get_variable(name, magic_command_instance): 

63 """ 

64 Retrieves the value of a local variable in a notebook. 

65 

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 

72 

73 The function raises an exception if the context does not exists 

74 or if the variable name does not value 

75 

76 .. faqref:: 

77 :tag: jupyter 

78 :title: Accéder ou modifier une variable du notebook depuis une commande magique 

79 

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. 

86 

87 :: 

88 

89 class CustomMagics(Magics): 

90 

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 Exception( 

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] 

102 

103 

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) 

109 

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 

114 

115 .. faqref:: 

116 :tag: jupyter 

117 :title: Lancer le serveur de notebooks 

118 :lid: i-launch_notebook-server 

119 

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 : 

125 

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. 

133 

134 #. Utiliser la fonction :func:`jupyter_open_notebook <ensae_teaching_cs.faq.faq_jupyter.jupyter_open_notebook>` :: 

135 

136 from ensae_teaching_cs.faq import jupyter_open_notebook 

137 nbfile = "notebook.ipynb" 

138 jupyter_open_notebook(nbfile) 

139 

140 #. Utiliser le raccourci proposé par la distribution choisi pour installer Python. 

141 

142 .. faqref:: 

143 :tag: jupyter 

144 :title: Le notebook ne répond plus 

145 

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)