Как показать (как выходную ячейку) содержимое файла .py с подсветкой синтаксиса?

Мне известно о функции %load (ранее %loadpy), которая загружает содержимое файла (или URL,...) в новую ячейку ввода (которая может быть выполнена впоследствии).

Я также знаю %less, %more и %pycat, которые показывают содержимое файла в пейджере (что означает, что в записной книжке он отображается в разделенном окне внизу экрана).

Есть ли (волшебная) команда для загрузки файла и отображения его содержимого (с подсветкой синтаксиса) в выходной ячейке?

т.е. что-то вроде следующего, но с подсветкой синтаксиса результата:

with open('my_file.py', 'r') as f:
    print(f.read())

Я хочу, чтобы содержимое файла сохранялось в файле .ipynb, но я не хочу, чтобы он выполнялся, когда я делаю Cell → Run All.

Есть ли команда, похожая на %psource, которая показывает исходный код в выходной ячейке вместо пейджера?

Ответ 1

Нет никакого способа сделать это с текущей магией, но это довольно легко, используя pygments и возвращающий IPython.display.HTML(...).

Ответ 2

Пример кода, основанного на ответе @Matt:

from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter
import IPython

with open('my_file.py') as f:
    code = f.read()

formatter = HtmlFormatter()
IPython.display.HTML('<style type="text/css">{}</style>{}'.format(
    formatter.get_style_defs('.highlight'),
    highlight(code, PythonLexer(), formatter)))