Как отображать номера строк в ячейке кода ноутбука IPython по умолчанию

Я бы хотел, чтобы мой дисплей по умолчанию для ячеек кода для ноутбуков IPython включал номера строк.

Я узнал из Отображение номеров строк в IPython/Jupyter Notebooks, которые я могу переключить с помощью ctrl-M L, что здорово, но вручную. Чтобы включить номера строк по умолчанию, мне нужно будет добавить что-то в файл ipython_notebook_config.py. Если я что-то пропустил, в документации нет объяснений, как это сделать.

Ответ 1

В вашем файле custom.js (местоположение зависит от вашей ОС) поставьте

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

Если вы не можете найти custom.js, вы можете просто найти его, но обычно он будет в вашей папке profile_default. Если он не существует, создайте файл в $(ipython locate profile)/static/custom/custom.js

Если по какой-либо причине это не работает, вы всегда можете редактировать файл custom.js в site-packages/IPython/html/static/custom/ тем же способом.

Ответ 2

(для Jupyter 4 +) В последних версиях Jupyter они задокументировали место для внесения изменений в конфигурацию, В основном, в обновлении Jupyter они удалили концепцию профилей, поэтому расположение файла custom.js теперь .jupyter/custom/custom.js, в зависимости от того, где находится ваша папка .jupyter. Поэтому, если у вас нет папки custom или custom.js, просто создайте их, а затем поместите эти строки во вновь созданный файл:

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

Вышеуказанное относится к тому, чтобы одновременно устанавливать номера строк в все типы ваших клеток. Code, Markdown и Raw будут получать номера строк, если вы это сделаете. Если вам нужны строки только для кодовых ячеек, существует более простой подход. Выберите ячейку кода, откройте консоль Chrome/Firefox JavaScript, введите следующие строки:

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

Затем перезагрузите страницу. Эти изменения сохраняются, потому что Jupyter создаст файл конфигурации json в .jupyter/nbconfig, чтобы сохранить их. Этот метод находится в этой странице документации, поэтому прочитайте документы для большего количества изменений конфигурации, которые вы можете сделать.


(старый ответ)

В последней версии IPython Notebook (v3.1.0) перейдите к ~/.ipython/<profile_name>/static/custom/custom.js и добавьте следующие строки:

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

Строка IPython.Cell.options_default.cm_config.lineNumbers = true; сама по себе не будет работать, так как она должна загружать объект IPython.Cell, прежде чем он попытается это сделать. Добавление этой строки приведет к ошибке undefined в консоли. Вам нужно заключить его в обработчик событий, как показано.

@Код William-Denman, возможно, работал для более ранней версии, но теперь вам нужно будет это сделать.

EDIT: Строка кода прямо посередине должна быть изменена на require("notebook/js/cell").Cell.options_default.cm_config.lineNumbers = true; для последней версии IPython/Jupyter (IPython 4.0.0, Jupyter 4.0 +0,6). Старый объект IPython.Cell также будет работать, но ваша веб-консоль выдаст предупреждение об устаревании, поэтому вы можете ожидать, что старая строка не будет поддерживаться в будущих версиях.

Кроме того, в последнем IPython/Jupyter, который я запускаю с помощью переносной WinPython, я не смог найти custom.js файл в папке профиля. Я нашел его (после большого поиска) в WinPython-64bit-2.7.10.3\python-2.7.10.amd64\Lib\site-packages\notebook\static\custom. Я не знаю, это ли это вещь WinPython или вещь Jupyter. Если у кого-то есть Jupyter (последняя версия), установленная нормально (используя пипс или что-то еще) и все еще можно найти файл custom.js в папке профиля, прокомментируйте.