Jupyter Kernel для Deno
Deno поставляется со встроенным Jupyter ядром, которое позволяет вам писать JavaScript и TypeScript, использовать Web и Deno API и импортировать пакеты npm прямо в свои интерактивные блокноты.
deno jupyter всегда выполняется с --allow-all
В настоящее время весь код, выполняемый в Jupyter ядре, выполняется со флагом --allow-all. Это временное ограничение, которое будет устранено в будущем.
Быстрый старт
Запустите deno jupyter --unstable и следуйте инструкциям.
Вы можете запустить deno jupyter --unstable --install для принудительной установки ядра. Deno предполагает, что команда jupyter доступна в вашей PATH.
После завершения процесса установки ядро Deno будет доступно в диалоговом окне создания блокнота в JupyterLab и классическом блокноте:

Вы можете использовать ядро Deno Jupyter в любом редакторе, поддерживающем Jupyter блокноты.
VS Code
- Установите расширение VSCode Jupyter
- Откройте или создайте файл блокнота, открыв палитру команд (Ctrl+Shift+P) и выбрав "Создать: Новый Jupyter блокнот". Это можно сделать вручную, создав файл с расширением ".ipynb".
- При создании или открытии блокнота выберите "Ядра Jupyter" и затем выберите Deno
IDE JetBrains
Jupyter блокноты доступны прямо из коробки.
Вывод богатого содержимого
Пространство имен Deno.jupyter предоставляет вспомогательные функции для отображения богатого содержимого в ваших блокнотах с использованием типов MIME, которые поддерживает Jupyter.
Самый простой способ предоставить богатый вывод — вернуть объект, который имеет метод [Symbol.for("Jupyter.display")].
Этот метод должен возвращать словарь, сопоставляющий тип MIME со значением, которое должно быть отображено.
{
[Symbol.for("Jupyter.display")]() {
return {
// Plain text content
"text/plain": "Hello world!",
// HTML output
"text/html": "<h1>Hello world!</h1>",
}
}
}
Пример объекта, который возвращает вывод обычного текста и HTML.
Вы также можете использовать Deno.jupyter.$display вместо ввода Symbol.for("Jupyter.display")
Это обычная функция, поэтому вы можете использовать любую библиотеку для форматирования вывода — например, использовать @std/fmt/colors для предоставления красочного вывода:
import * as colors from "jsr:@std/fmt/colors";
{
[Deno.jupyter.$display]() {
return {
"text/plain": colors.green("Hello world"),
}
}
}
Вы также можете использовать функцию Deno.jupyter.display для непосредственного отображения набора MIME:
await Deno.jupyter.display({
"text/plain": "Hello, world!",
"text/html": "<h1>Hello, world!</h1>",
"text/markdown": "# Hello, world!",
}, { raw: true });
Передний конец вашего блокнота автоматически выберет "наиболее богатый" тип MIME для отображения в зависимости от его возможностей.
Deno.jupyter предоставляет несколько вспомогательных методов для богатого вывода общих типов медиа.
Deno.jupyter.html — это помеченное шаблонное выражение, которое отобразит указанную строку в блокноте как HTML.
Deno.jupyter.html`<h1>Hello, world!</h1>
<h2>From Deno kernel</h2>
<p>Lorem ipsum <i>dolor</i> <b>sit</b> <u>amet</u></p>`;
Deno.jupyter.md — это помеченное шаблонное выражение, которое отобразит указанную строку в блокноте как Markdown-документ.
Deno.jupyter
.md`# Notebooks in TypeScript via Deno 
**Interactive compute with Jupyter _built into Deno_!**`;
Deno.jupyter.svg — это помеченное шаблонное выражение, которое отобразит указанную строку в блокноте как SVG-фигуру.
Deno.jupyter.svg`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>`;
Deno.jupyter.image — это функция, которая отобразит изображение JPG или PNG. Вы можете передать путь к файлу или уже прочитанные байты:
Deno.jupyter.image("./cat.jpg");
const data = Deno.readFileSync("./dog.png");
Deno.jupyter.image(data);
API prompt и confirm
Вы можете использовать API prompt и confirm Web API для ожидания ввода пользователя в вашем блокноте.
Вещание канала IO pub
Deno.jupyter.broadcast позволяет публиковать сообщения в канал IO pub, что позволяет предоставлять динамические обновления по мере оценки ячейки.
Рассмотрим этот пример, который выводит сообщение перед запуском вычисления и другое, когда вычисление завершено:
await Deno.jupyter.broadcast("display_data", {
data: { "text/html": "<b>Processing...</b>" },
metadata: {},
transient: { display_id: "progress" },
});
// Pretend we're doing an expensive compute
await new Promise((resolve) => setTimeout(resolve, 1500));
await Deno.jupyter.broadcast("update_display_data", {
data: { "text/html": "<b>Done</b>" },
metadata: {},
transient: { display_id: "progress" },
});
Примеры
Вот пример использования @observablehq/plot для генерации диаграммы:
import { document, penguins } from "jsr:@ry/jupyter-helper";
import * as Plot from "npm:@observablehq/plot";
let p = await penguins();
Plot.plot({
marks: [
Plot.dot(p.toRecords(), {
x: "culmen_depth_mm",
y: "culmen_length_mm",
fill: "species",
}),
],
document,
});
См. https://github.com/rgbkrk/denotebooks для более продвинутых примеров, использующих библиотеки анализа и визуализации данных, такие как Polars, Observable и d3.
jupyter console интеграция
Вы также можете использовать Deno Jupyter ядро в jupyter console REPL. Для этого вы должны запустить свою консоль с jupyter console --kernel deno.

© 2018–2024 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/reference/cli/jupyter