Как изменить `nbconvert --from python`?

По сути, я хочу сделать обратное

ipython nbconvert --to python foo.ipynb

IOW, я хочу программно «синтезировать» блокноты iPython из исходного кода Python1 (возможно, с соответствующими комментариями).

Есть ли инструменты для этого?

FWIW, я опытный пользователь Emacs и недавно «перешел» на его org-mode, поэтому я особенно приветствую решения, которые хорошо с ними работают.


1 Почему я хочу это сделать? Это очень длинная и утомительная история, но вкратце: я должен сдавать домашние задания для класса в виде файлов *.ipynb, но мне не нравится работать с блокнотами iPython, так как я боится мышей, работаю только с текстом. Emacs-голова. Инструменты для работы с блокнотами iPython в Emacs, ИМХО, ужасны, если вообще работают (это собственно «долгая и нудная» часть истории). Единственный оставшийся способ действий для меня — это тот, о котором идет речь в этом посте.


person kjo    schedule 03.02.2015    source источник
comment
Теперь это проблема первого мира :). Я предполагаю, что проблема в том, что блокноты содержат больше информации, чем просто код. Преобразование ipynb-›py не проблема, потому что вы потеряете информацию. Преобразование py->ipynb требует дополнительной информации... Тем не менее: Блокноты - это всего лишь json файлов. Конечно, вы можете создавать свои собственные блокноты и запускать их через командную строку, например, с помощью runipy. Было бы проще: напишите свой код в своем любимом редакторе и скопируйте результаты в блокнот, прежде чем отправлять домашнее задание :)   -  person cel    schedule 03.02.2015
comment
@cel Действительно, это проблема первого мира: у меня RSI от использования мыши; нуждались в операции на обоих плечах; моя ненависть к использованию мыши имеет медицинскую основу. (Опять же, я не могу придумать ни одной проблемы, опубликованной в SO, которая не является проблемой первого мира.) Что касается вашего предложения по копированию и вставке: каждое домашнее задание влечет за собой заполнение 20-30 пробелов кодом. Это 20-30 операций копирования-вставки. Нет, спасибо. Но спасибо за рупорный указатель.   -  person kjo    schedule 03.02.2015
comment
Жаль это слышать. Блокноты IPython не предназначены для редактирования через командную строку. Но, как я уже сказал, конечно, никто не мешает вам изучить структуру файлов json и манипулировать блокнотом с помощью emacs. Так что, в принципе, можно писать и редактировать блокноты, даже не используя графический интерфейс. Конечно, это не очень приятное решение. Но я сомневаюсь, что есть лучшее решение этой довольно необычной проблемы.   -  person cel    schedule 03.02.2015


Ответы (1)


Перетаскивание py-файла на панель инструментов должно помочь (в версии 2.x), есть несколько специальных маркеров комментариев, которые разделят блокнот в нужном месте. Это должно быть программно выполнимо путем импорта IPython.nbformat, который получает все API-интерфейсы Python для создания блокнотов. Некоторый код, вероятно, находится где-то в IPython/html/, если вы хотите пойти по этому пути и иметь пример, не стесняйтесь спрашивать на IPython-dev ml, мы будем рады вам помочь. Эта часть кода плохо протестирована пользователями.

Вам следует взглянуть на ipymd (ipynb+md). Сирил пишет об этом книгу и занимается более или менее той же проблемой, что и «необходимость манипулировать чистым текстом».

Я также подчеркну EIN , но поддерживаемая де-факто вилка будет одной из millejoh, который регулярно обновляется. Вы сможете напрямую редактировать файл ipynb из emacs, + встроенный график и т. д. Но я думаю, что это один из «инструментов для работы с блокнотами iPython в Emacs», который вам не нравится, но может быть интересен будущему читателю.

Наконец, я просто хочу отметить, что если задание выполнено в виде блокнота IPython (введите «заполните пробелы») и должно оцениваться чем-то вроде github:jupyter/nbgrader, то использование чистого текста может не сработать, поскольку ipynb может иметь дополнительные метаданные, которые не переживут преобразование.

person Matt    schedule 03.02.2015