web-dev-qa-db-fra.com

Comment afficher les numéros de ligne dans la cellule de code IPython Notebook par défaut

J'aimerais que mon affichage par défaut pour les cellules de code de bloc-notes IPython inclue des numéros de ligne.

J'ai appris de Affichage des numéros de ligne dans les cahiers IPython/Jupyter que je peux basculer avec ctrl-M L, ce qui est génial, mais manuel. Afin d'inclure les numéros de ligne par défaut, j'aurais besoin d'ajouter quelque chose à mon fichier ipython_notebook_config.py. Sauf si j'ai raté quelque chose, il n'y a pas d'explication sur la façon de procéder dans la documentation.

28
khstacking

Dans votre fichier custom.js (L'emplacement dépend de votre système d'exploitation) mettez

IPython.Cell.options_default.cm_config.lineNumbers = true;

Si vous ne trouvez pas custom.js, vous pouvez simplement le rechercher, mais généralement il se trouvera dans votre dossier profile_default. S'il n'existe pas, créez le fichier dans $(ipython locate profile)/static/custom/custom.js

Si, pour une raison quelconque, cela ne fonctionne pas, vous pouvez toujours modifier le fichier custom.js Dans le site-packages/IPython/html/static/custom/ De la même manière.

22
William Denman

(Pour Jupyter 4 +) Dans les dernières versions de Jupyter, ils ont documenté l'endroit pour effectuer des changements de configuration. Donc, fondamentalement, dans la mise à jour de Jupyter, ils ont supprimé le concept de profils, donc l'emplacement du fichier custom.js Est maintenant .jupyter/custom/custom.js, Selon l'endroit où se trouve votre dossier .jupyter. Donc, si vous n'avez pas de dossier custom ou le fichier custom.js, Créez-les, puis mettez ces lignes dans le fichier nouvellement créé:

define([
    'base/js/namespace',
    'base/js/events'
    ], 
    function(IPython, events) {
        events.on("app_initialized.NotebookApp", 
            function () {
                require("notebook/js/cell").Cell.options_default.cm_config.lineNumbers = true;
            }
        );
    }
);

Ce qui précède sert à définir des numéros de ligne pour tous vos types de cellules en même temps. Les cellules Code, Markdown et Raw obtiendront toutes des numéros de ligne si vous procédez ainsi. Si vous voulez des numéros de ligne uniquement pour les cellules de code , il existe une approche plus simple. Sélectionnez une cellule de code, ouvrez la console JavaScript Chrome/Firefox, saisissez les lignes suivantes:

var cell = Jupyter.notebook.get_selected_cell();
var config = cell.config;
var patch = {
    CodeCell:{
        cm_config:{lineNumbers:true}
    }
}
config.update(patch)

Rechargez ensuite la page. Ces modifications persistent car Jupyter créera un fichier de configuration json dans .jupyter/nbconfig Pour les stocker. Cette méthode provient de cette page de la documentation, alors lisez les documents pour plus de modifications de configuration que vous pouvez apporter.


(ancienne réponse)

Dans la dernière version de IPython Notebook (v3.1.0), accédez à ~/.ipython/<profile_name>/static/custom/custom.js Et ajoutez ces lignes:

define([
    'base/js/namespace',
    'base/js/events'
    ], 
    function(IPython, events) {
        events.on("app_initialized.NotebookApp", 
            function () {
                IPython.Cell.options_default.cm_config.lineNumbers = true;
            }
        );
    }
);

La ligne IPython.Cell.options_default.cm_config.lineNumbers = true; Seule ne fonctionnera pas car elle doit charger l'objet IPython.Cell avant d'essayer cela. L'ajout de cette ligne seule entraînera une erreur non définie dans la console. Vous devez l'enfermer dans le gestionnaire d'événements comme indiqué.

@ Le code de William-Denman a peut-être fonctionné pour une version antérieure, mais vous devez maintenant le faire.

EDIT: La ligne de code au milieu doit être changée en require("notebook/js/cell").Cell.options_default.cm_config.lineNumbers = true; pour la dernière version d'IPython/Jupyter ( IPython 4.0.0, Jupyter 4.0.6 ). L'ancien objet IPython.Cell Fonctionnera également, mais votre console Web lancera un avertissement de dépréciation, vous pouvez donc vous attendre à ce que l'ancienne ligne ne soit pas prise en charge dans les futures versions.

De plus, dans le dernier IPython/Jupyter, que j'utilise en utilisant WinPython portable , je n'ai pas pu trouver le fichier custom.js Dans le dossier de profil. Je l'ai trouvé (après beaucoup recherche) dans WinPython-64bit-2.7.10.3\python-2.7.10.AMD64\Lib\site-packages\notebook\static\custom. Je ne sais pas si c'est une chose WinPython ou une chose Jupyter. Si quelqu'un a Jupyter (dernière version) installé normalement (en utilisant pip ou autre) et peut toujours trouver le fichier custom.js Dans le dossier de profil, veuillez commenter.

41
Mindstormer619

Ci-dessus n'a pas fonctionné pour moi en 2018

J'ai trouvé qu'à l'intérieur ~/.jupyter/nbconfig/notebook.json Je devais ajouter pour ajouter les lignes suivantes:

"CodeCell": {
  "cm_config": {
  "lineNumbers": true
}

à l'intérieur de l'objet qui était là. Ainsi, l'objet final ressemblerait à:

{
  "CodeCell": {
    "cm_config": {
      "lineNumbers": true
    }
  }
}
4
Stephen Cowley