Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Technical Portfolio
GitHub & GitVerse Pages

1. Настройка рабочего пространства

SQL Lab in JupyterLab

Data & BI Analyst

Забегая вперед отмечу, что чистый файл зависимостей environment.yml создать пришлось. Но, во-первых, на старте его не было, а во-вторых, это гайд как создать с нуля. Поехали.

Простое решение: создать новое окружение на базе Anaconda Metapackage – готового набора популярных библиотек для Data Science, Data Analysis и Machine Learning с идеальной совместимостью версий.

# Anaconda Prompt: (base) C:\Users\YOUR_USERNAME>

# Создаем окружение с базовым набором Anaconda Metapackage
conda create --name ds-book anaconda

# Активируем его
conda activate ds-book

Этот путь был выбран на старте, чтобы не заморачиваться потом с доустановкой необходимых пакетов и исправлением возможных конфликтов зависимостей.


Однако, оказавшись за стареньким дачным компом с нестабильным мобильным интернетом оказалось, что этот путь невозможен. Пришлось почерепить что действительно может понадобиться и разбил задачу на три этапа.

1.1. Создание изолированного окружения

# -- Этап 1 -- Anaconda Prompt: (base) C:\Users\YOUR_USERNAME>
# Создание conda-окружения и установка базовых пакетов

conda create --name ds-book -c conda-forge python=3.12 jupyterlab=4.4.7 ^
  notebook=7.4.5 pandas numpy matplotlib seaborn scikit-learn ^
  python-dotenv cryptography sqlalchemy -y

# Python -- 3.12 стабильный релиз из сбалансированного Anaconda Distribution
# Jupyter Lab -- 4.4.7 для совместимости с расширением `jupyterlab_myst`
# Jupyter Notebook -- 7.4.5 синхронизирован с базой JupyterLab 4.

conda activate ds-book
ПакетВерсия в проектеНазначение
python=3.123.12.13Ядро языка программирования
jupyterlab=4.4.74.4.7Интерактивная среда разработки
notebook=7.4.57.4.5Интерактивная среда разработки
pandas3.0.5Классический анализ данных. Базовый инструмент обработки таблиц (DataFrames)
numpy2.5.1Математические вычисления
matplotlib3.11.1Базовые графики
seaborn0.13.2Статистическая визуализация
scikit-learn1.9.0Машинное обучение
python-dotenv1.2.2Управление секретами. Безопасное хранение паролей БД и токенов в файлах .env
cryptography50.0.0Шифрование данных. На случай продвинутой работы с секретами внутри Python
sqlalchemy2.0.51Универсальный ORM-мост между Python и реляционными БД

1.2. Установка инструментов верстки и коннекторов БД

# -- Этап 2 -- Anaconda Prompt: (ds-book) C:\Users\YOUR_USERNAME>
# Установка в conda инструментов верстки и коннекторов БД

conda install -c conda-forge jupyter-book mysql-connector-python ^
  pymysql jupysql jupyterlab-myst
ПакетВерсия в проектеНазначение
Jupyter Book2.1.6Для верстки сайта из файлов Markdown и блокнотов Jupyter
mysql-connector-python9.7.0Драйвер базы данных MySQL для Python
pymysql1.2.0Драйвер-коннектор MySQL для SQLAlchemy
JupySQL0.11.1Расширение для работы с SQL в ячейках Jupyter c поддержкой подсветки синтаксиса
jupyterlab-execute-time3.3.0Плагин для вывода времени исполнения запроса в строке статуса ячейки Jupyter Lab
jupyterlab_myst2.7.0Визуальный плагин разметки MyST для Lab. Рендерит внутри интерфейса во время работы

1.3. Установка Polars

Чтобы неожиданно не получить в Jupyter Lab Kernel Died (как произошло у меня на старом компе), хорошо бы знать какой на ПК процессор (CPU):

Установка Polars вынесена в отдельный раздел, чтобы разобрать грабли с архитектурой процессоров и показать, почему по умолчанию в environment.yml зафиксирован вариант через pip, но оставлена возможность переключиться на чистую conda для современного железа.

Из официальной документации установка производится через менеджер pip.

# Anaconda Prompt: (ds-book) C:\Users\YOUR_USERNAME>

# На современных CPU с поддержкой AVX2
pip install polars

# На старых CPU без поддержки AVX2
pip install polars[rtcompat]
ПакетВерсия в проектеНазначение
Polars1.43.2Аналог Pandas. Мощный современный движок на Rust для щупанья альтернатив (на современных CPU)
polars[rtcompat]1.43.2На старых ПК: c автоматической поддержкой старых процессоров без AVX2 (через движок совместимости)

Поскольку polars[rtcompat] оказался универсальным, то в environment.yml именно он зафиксирован для установки Polars по умолчанию.


Окружение проекта строим на Conda. Чтобы выяснить возможность установки пакетов через conda, проверим их доступность в репозиториях.

# Anaconda Prompt: (base) C:\Users\YOUR_USERNAME>

conda search -c conda-forge -c defaults polars
Loading channels: done
# Name                  Version  Build             Channel
...                     ...      ...               ...
polars                  1.43.1   pyh8da0edf_0      conda-forge
polars                  1.43.2   pyh8da0edf_0      conda-forge
polars                  1.44.0   pyh8da0edf_0      conda-forge
polars                  1.44.1   pyh8da0edf_0      conda-forge
polars                  1.44.2   pyh3138b34_0      conda-forge

Видим, что на современном ПК установить polars через conda можем:

А вот на старом ПК (без AVX2) устанавливать polars[rtcompat] придется через pip.

# Anaconda Prompt: (base) C:\Users\YOUR_USERNAME>

conda search -c conda-forge -c defaults polars-runtime-compat
Loading channels: done
# Name                  Version  Build             Channel
...                     ...      ...               ...
polars-runtime-compat   1.41.2   py310haa95532_0   pkgs/main
polars-runtime-compat   1.41.2   py311haa95532_0   pkgs/main
polars-runtime-compat   1.41.2   py312haa95532_0   pkgs/main   # py312
polars-runtime-compat   1.41.2   py313haa95532_0   pkgs/main
polars-runtime-compat   1.41.2   py314haa95532_0   pkgs/main
...                     ...      ...               ...
polars-runtime-compat   1.44.1   py310h7f95213_0   conda-forge
polars-runtime-compat   1.44.1   py314h47234b9_0   conda-forge
polars-runtime-compat   1.44.2   py311hd8b5709_0   conda-forge
polars-runtime-compat   1.44.2   py314h47234b9_0   conda-forge

Поскольку каналы Conda отстают от релизов и не имеют нужной сборки под Python 3.12, установку polars[rtcompat] фиксируем через pip.


Наличие точечно различающихся окружений в принципе нормальная практика в Data Science: на слабом железе используется совместимый рантайм polars[rtcompat], а на современном – максимально оптимизированный polars.

Поэтому при сборке окружения вручную, итоговый Этап 3 представляет два варианта на выбор:

# -- Этап 3 -- Установка Polars
# Anaconda Prompt: C:\Users\YOUR_USERNAME>

# Вариант 1: на любых CPU -- Универсальный установщик через `pip`
# (ds-book)
pip install polars[rtcompat]

# Вариант 2: только на современных CPU с AVX2 -- через `conda`
# (base)
conda install -n ds-book --override-channels -c conda-forge polars

Работая над проектом на двух разных машинах, я использую оба сценария:

Чтобы убедиться, что ядро видит библиотеку и не падает:

# Проверить импорт внутри терминала Python
python
>>> import polars as pl
>>> print(pl.__version__)
1.43.2
>>> exit()
# Проверить импорт в ячейке Jupyter Lab
import polars as pl
print(pl.__version__)
# 1.43.2

Зачем понадобятся Pandas и Polars продемонстрировал в Главе 3.


1.4. Фиксация окружения

Окружение создано, все требуемые пакеты установлены – на этом можно было бы настройку рабочего пространства завершить.

Но это не наш метод. Потому что может сложиться ситуация, когда нам понадобится созданное окружение воссоздать. Поэтому потратим ещё какое-то количество времени и сохраним (зафиксируем) нашу работу в специальный файл зависимостей environment.yml.

Поскольку мы в Windows, папку проекта можем создать через штатный Проводник. Или продолжить в терминале:

# Anaconda Prompt: (ds-book) C:\Users\YOUR_USERNAME>

C:\Users\YOUR_USERNAME>D:   # перейти на датадиск
D:\>cd GitHub\Books         # перейти в родительскую папку проекта

# создать папку проекта и (&&) перейти в нее
mkdir Learning-SQL && cd Learning-SQL

Наконец, готовы создать волшебный файл, в котором будут зафиксированы все зависимости созданного нами окружения. Создадим его, находясь в нашем окружении (об этом подсказывает в скобках имя окружения (ds-book) перед текстом командной строки):

# Anaconda Prompt: (ds-book) D:\GitHub\Books\Learning-SQL>

conda env export --no-builds > environment.yml

После создания открываем environment.yml (например, в VS Code) и ... вручную убираем лишнее, корректируем, добавляем комментарии, чтобы получить чистый понятный завершенный вариант, готовый к развертыванию на любом компе

environment.yml
name: ds-book
channels:
  - conda-forge
  - defaults
dependencies:
  - python=3.12
  - pip
  # Среда разработки
  - jupyterlab=4.4.7
  - notebook=7.4.5
  - jupyter-book=2.1.6
  - jupyterlab-myst=2.7.0
  # Анализ данных и визуализация
  - pandas>=3.0.5
  # - polars>=1.43.2                    # на современных CPU с поддержкой AVX2
  - numpy>=2.5.1
  - matplotlib>=3.11.1
  - seaborn>=0.13.2
  - scikit-learn>=1.9.0
  # Работа с БД
  - sqlalchemy>=2.0.51
  - mysql-connector-python>=9.7.0
  - pymysql=1.2.0
  - jupysql=0.11.1
  # Утилиты
  - python-dotenv
  - cryptography
  - pip:
      - "polars[rtcompat]>=1.43.2"         # и на старых и на современных CPU
      - "jupyterlab_execute_time>=3.3.0"

1.5. Воспроизведение окружения

При наличии файла environment.yml создание окружения на другом компе сводится к одной простой команде

# Находясь в корне планируемого проекта в базовом окружении
# Anaconda Prompt: (base) D:\GitHub\Books\Learning-SQL>

conda env create -f environment.yml

1.6. Краткий чек-лист

# Этап 1: создание conda-окружения и установка базовых пакетов
conda create --name ds-book -c conda-forge python=3.12 jupyterlab=4.4.7 ^
  notebook=7.4.5 pandas numpy matplotlib seaborn scikit-learn ^
  python-dotenv cryptography sqlalchemy -y

# Активация окружения
conda activate ds-book

# Этап 2: установка в conda инструментов верстки и коннекторов БД
conda install -c conda-forge jupyter-book mysql-connector-python ^
  pymysql jupysql jupyterlab-myst

# Этап 3: Установка Polars через менеджер `pip`
pip install polars[rtcompat]

# Фиксация окружения
conda env export --no-builds > environment.yml

# Воспроизведение окружения
conda env create -f environment.yml