Скачать ipynb
01_anaconda

Цель данного материала — познакомить вас с Anaconda — инструментом, который поможет вам в программировании на Python и не только. Он пригодится, чтобы не запутаться в версиях установленных библиотек, а также с лёгкостью поможет установить необходимые для курса пакеты.

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

Anaconda

Anaconda_horizontal_RGB.jpg

Anacondaнаиболее известна как дистрибутив Python со встроенным в него пакетным менеджером conda. Она позволяет изолировать окружение проекта от системной версии Python, который критически необходим для работы системы. Использование sudo pip считается плохой практикой. Также conda позволяет без проблем переносить окружение с одной машины на другую. Кроме того, если вы что-то сломаете, то с Anaconda вы всегда сможете откатиться на более старую версию окружения. Конечно, если вы позаботитесь о регулярных бэкапах. С системной версией Python это гораздо сложнее и может потребовать переустановки системы.

Въедливый читатель скажет, что вместо Anaconda можно использовать virtualenv или docker. Тем не менее, docker это чаще всего overkill для простых проектов. Его сложно настраивать, он работает относительно медленно и требует sudo-прав. Связка pip + virtualenv хорошо работает для Python-only проектов, но вам также может быть придётся также работать с R. Кроме того, conda во многом аналогична пакетному менеджеру внутри операционной системы и позволяет локально без sudo-прав, которых в облаке у вас почти никогда нет, установить gcc, бразуер, альтернативный shell и многое другое для 100+ языков. С более подробным сравнением Anaconda с альтернативными инструментами вы можете ознакомиться по ссылке.

Мы установим Anaconda и настроим с её помощью комфортное окружение для работы над учебными курсами.

Альтернативы Anaconda

Если вы используете Linux-систему, то чаще проще обойтись без Anaconda, а использовать pip, например,

pip install numpy

В таком случае тоже можно настроить виртуальное окружение. Однако не стоит смешивать использование pip и conda!

Если вы не хотите ничего себе устанавливать, например, из-за малых мощностей, можно использовать Google Colab. Но в таком случае каждый раз придется заново настраивать окружение, кроме того, среда выполнения может отключаться при длительном простое.

Установка Anaconda

Скачайте последнюю версию Anaconda под свою ОС с официального сайта. Запустите установочный файл и следуйте инструкциям. Не меняйте дефолтные параметры без уважительной причины. После установки перезагрузите терминал, например, с помощью команды exec bash. Если всё прошло успешно, то ячейка ниже должна отработать без ошибок:

In [ ]:
!conda --version
conda 4.7.11

Создание conda environment

Заводить отдельный environment для каждого проекта — правило хорошего тона. Устанавливать всё в корневой envirnonment — прямой путь в отдельный круг ада, на который вы обрекаете себя в будущем. Кроме того, что это противоречит философии conda, — возможности сосуществования несовместимых дистрибутивов Python в пределах одной системы, — это также приводит к неконтролируемому росту числа установленных пакетов. Для разрешения зависимостей conda использует приближённый SAT-solver, а задача SAT NP-полна, потому упорное использование только одного environment-а вскоре приведёт к тому, что вы будете часами ждать установки пакетов.

Выполнив в терминале код из ячейки ниже, вы создадите environment для нашего курса в директории ~:

conda create -n mipt-stats python=3.7 r=3.6 --yes

Эта команда создаст environment, в котором уже будут установлены Python и R, что сэкономит вам время в будущем.
Активируйте окружение, запустив в терминале ячейку ниже:

conda activate mipt-stats

Если вы захотите вернуться в базовое окружение, введите

conda deactivate

Если вы хотите создать окружение в другой папке, то замените флаг -n на -o

conda create -o path/to/env python=3.7 r=3.6 --yes

Обратите внимание, что при этом вам придётся указывать полный путь при использовании команды conda activate:

conda activate /path/to/env

Установка mamba и основных пакетов

Выше упоминалось, что для разрешения зависимостей conda приближённо решает задачу SAT. К сожалению и стыду разработчиков из Continuum, SAT-solver в conda написан на pure Python, из-за чего он работает возмутительно медленно. Эту проблему решает mambaSAT-solver для conda, написанный на C++ компанией QuantStack.

conda install -c conda-forge mamba --yes

Далее везде используйте mamba install вместо conda install.

Аргумент -c позволяет указать репозиторий, в котором будет осуществляться поиск. Настоятельно рекомендуется использовать репозиторий conda-forge, т.к. там почти всегда можно найти актуальные версии пакетов, чего не скажешь об основном репозитории Anaconda. Причина в том, что conda-forge управляется сообществом пользователей conda, в то время как право добавлять пакеты в основной репозиторий имеют только разработчики из Continuum. Устанавливать пакеты из других репозиториев стоит только при необходимости, т.к. это может привести к переустановке уже установленных пакетов с их заменой на те версии из репозитория, из которого вы хотите что-то установить.

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

In [ ]:
!mamba install -c conda-forge pip git numpy \
scipy statsmodels sympy pandas tqdm --yes

Важное замечание: никогда не смешивайте pip и conda!

Подробное обсуждение этого вопроса можно прочитать на stackoverflow. Кратко, conda и pip были созданы для принципиально разных задач и "не знают" друг о друге: пакеты, которые вы установили через pip, будут видны изнутри conda, так как они ставятся напрямую в системный Python, но никакой инкапсуляции при этом не получится. Они не будут учитываться conda при разрешении зависимостей, а также могут быть параллельно установлены через conda в другой версии, что приведёт к странным ошибкам и неизбежному моральному падению.

Более того, даже если вы установите pip через conda, это всё ещё будет не то же самое, что установка пакетов через conda обычным образом. Гарантировать корректное разрешение зависимостей при этом будет нельзя.