Skip to main content

Конвертер Python ↔ Jupyter Notebook

Project description

Конвертер Python ↔ Jupyter Notebook

Этот инструмент автоматически конвертирует Python файлы в Jupyter ноутбуки и наоборот.

✨ Основные возможности

  • 🔄 Двунаправленная конвертация: py ↔ ipynb
  • 📝 Поддержка markdown: автоматическое распознавание комментариев как markdown ячеек
  • 📊 Структурирование кода: функции и классы в отдельных ячейках (включая декораторы)
  • 🔗 Многофайловое слияние: объединение нескольких файлов в один
  • 🌟 Glob-шаблоны: поддержка * и ? для обработки множественных файлов
  • Взаимообратимость: конвертация туда-обратно сохраняет исходную структуру

Логика конвертации

Python → Jupyter (.py → .ipynb)

  1. Заголовочные комментарии """ # заголовок # """ становятся markdown ячейками заголовков
  2. Многострочные комментарии r"""...""" и """...""" становятся markdown ячейками
  3. Функции и классы становятся отдельными code ячейками
  4. Остальной код группируется в code ячейки
  5. Docstring'и внутри функций/классов остаются частью кода
  6. Обычные Python комментарии # текст остаются обычными комментариями

Jupyter → Python (.ipynb → .py)

  1. Markdown ячейки заголовки # заголовок #заголовочные комментарии """ # заголовок # """
  2. Markdown ячейки с \ символамикомментарии с префиксом r"""..."""
  3. Обычные markdown ячейкимногострочные комментарии """..."""
  4. Code ячейки остаются как обычный Python код
  5. Каждая ячейка отделяется пустой строкой
  6. Outputs игнорируются

🚀 Использование

Справка

# Подробная справка с примерами
py2jupyter --help
py2jupyter -h

# Краткая справка
py2jupyter

Базовая конвертация

# Python → Jupyter (автоматическое имя выходного файла)
py2jupyter script.py

# Python → Jupyter (указанное имя)
py2jupyter script.py notebook.ipynb

# Python → Jupyter (автоматическое расширение)
py2jupyter script.py output  # → создаст output.ipynb

# Jupyter → Python (автоматическое имя)
py2jupyter notebook.ipynb

# Jupyter → Python (автоматическое расширение)
py2jupyter notebook.ipynb output  # → создаст output.py

Многофайловое слияние

# Объединение нескольких Python файлов в один Notebook
py2jupyter script1.py script2.py script3.py combined.ipynb

# Объединение нескольких Notebook в один Python файл
py2jupyter notebook1.ipynb notebook2.ipynb merged.py

Примечания:

  • При многофайловом слиянии выходной файл обязательно должен быть указан
  • Если расширение выходного файла не указано, оно определяется автоматически (.py → .ipynb, .ipynb → .py)

Использование glob-шаблонов

# Конвертация всех Python файлов в текущей директории
py2jupyter *.py

# Конвертация файлов с определенным префиксом
py2jupyter test_*.py

# Конвертация с объединением в один файл
py2jupyter script_*.py combined.ipynb

# Поддержка различных шаблонов
py2jupyter data/test_?.py results.ipynb

Примечания:

  • Шаблоны * и ? автоматически расширяются в список файлов
  • Файлы сортируются по имени для предсказуемого порядка
  • При использовании шаблонов с одним файлом выходное имя генерируется автоматически

📋 Правила оформления

Для правильной конвертации Python файлов в Jupyter ноутбуки следуйте правилам оформления, описанным в файле PY_FORMAT_RULES.md или скажите своей LLM следовать им.

Гарантируется, что для файлов, оформленных согласно правилам оформления, конвертация будет обратимой, то есть конвертация туда-обратно не будет менять код.

📋 Примеры

Входной Python файл:

""" # Моделирование физической системы # """

"""
Этот скрипт демонстрирует расчет энергии.
Формула: $E = \frac{1}{2}mv^2 + \frac{1}{2}kx^2$
"""

#> !pip install matplotlib
#> %matplotlib inline

import numpy as np
import matplotlib.pyplot as plt

def calculate_energy(x, v, m=1.0, k=100.0):
    """Расчет полной энергии системы (это docstring)"""
    kinetic = 0.5 * m * v**2
    potential = 0.5 * k * x**2
    return kinetic + potential

r"""
Раздел с анализом (содержит \ символы).
Интеграл: $\int_0^1 x^2 dx = \frac{1}{3}$
"""

""" # Параметры системы # """

# Обычный Python комментарий остается как есть
x0 = 0.1  # начальное смещение
v0 = 0.0  # начальная скорость

Результат конвертации в Jupyter:

  • Cell 0 (markdown): # Моделирование физической системы #
  • Cell 1 (markdown): Описание с LaTeX формулой
  • Cell 2 (code): import numpy as np и import matplotlib.pyplot as plt
  • Cell 3 (code): %matplotlib inline
  • Cell 4 (code): ! pip install seaborn
  • Cell 5 (code): Функция calculate_energy с docstring
  • Cell 6 (markdown): Раздел с анализом и интегралом
  • Cell 7 (markdown): # Параметры системы #
  • Cell 8 (code): Комментарии и инициализация переменных

Результат обратной конвертации:

""" # Моделирование физической системы # """

"""
Этот скрипт демонстрирует расчет энергии.
Формула: $E = \frac{1}{2}mv^2 + \frac{1}{2}kx^2$
"""

# ... код функций ...

#%matplotlib inline

#!pip install seaborn

r"""
Раздел с анализом (содержит \ символы).
Интеграл: $\int_0^1 x^2 dx = \frac{1}{3}$
"""

""" # Параметры системы # """

Умное определение префиксов: ячейки с \ символами получают префикс r, остальные - нет

⚙️ Технические особенности

  • UTF-8 кодировка: полная поддержка Unicode
  • Сохранение структуры: функции и классы остаются читаемыми
  • Умное распознавание: автоматическое определение типов ячеек
  • Масштабируемость: работа с большими файлами (1000+ строк)
  • Взаимообратимость: минимальные изменения при полном цикле конвертации
  • Совместимость: поддержка Python 3.7+, адаптация под новые версии AST
  • Автоматические расширения: умное определение .py/.ipynb при отсутствии расширения
  • Заголовочные комментарии: специальный формат """ # заголовок # """ для четких заголовков
  • Умные префиксы: автоматическое определение r на основе наличия \ символов
  • Универсальные комментарии: поддержка как r"""...""", так и обычных """..."""
  • Очистка пустых строк: автоматическое удаление пустых строк в начале и конце code ячеек
  • Разделение по пустым строкам: автоматическое разделение больших блоков кода на меньшие ячейки при наличии двух и более пустых строк подряд (только на уровне нулевого отступа)
  • Поддержка magic команд: автоматическая конвертация между #%command в .py и magic ячейками в .ipynb
  • Поддержка shell команд: автоматическая конвертация между #!command в .py и shell ячейками в .ipynb
  • Встроенная справка: подробная документация через --help с примерами и форматами

🔧 Требования

  • Python 3.7+
  • Стандартные библиотеки: ast, json, pathlib

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py2jupyter-0.3.tar.gz (34.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

py2jupyter-0.3-py3-none-any.whl (21.7 kB view details)

Uploaded Python 3

File details

Details for the file py2jupyter-0.3.tar.gz.

File metadata

  • Download URL: py2jupyter-0.3.tar.gz
  • Upload date:
  • Size: 34.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for py2jupyter-0.3.tar.gz
Algorithm Hash digest
SHA256 34c57dc244345bb1f617c1b773810cea94d0a0849b34a7c8d44b187c64f9837d
MD5 89ad0aeec5375252854e5e30fa0cf336
BLAKE2b-256 aa099e747410353cbae9824f443114eb7e1203c1fb1eed33082ebb1f6f2b6f03

See more details on using hashes here.

File details

Details for the file py2jupyter-0.3-py3-none-any.whl.

File metadata

  • Download URL: py2jupyter-0.3-py3-none-any.whl
  • Upload date:
  • Size: 21.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for py2jupyter-0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 dbaf7d474df4c3a7b37cae62fb718b9bcbc2e5b3213505cd3e9b3f72193715e9
MD5 9e6f5bf41601c2f9f3e08c4bd11d20c0
BLAKE2b-256 895574e72ec6300c97a00d78cd6dd1546f9c1dbc5278b17935c8f42e233b9955

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page