Зачем использовать виртуальные среды в науке о данных?
Управление зависимостями играет важную роль для разработчиков пакетов и ПО. Но как насчет специалистов по науке о данных, которые не занимаются развертыванием PyPI или conda-forge?
Виртуальные среды помогают исправлять ошибки
Если вы уже работали с Python, то знаете, как тяжело разобраться в этой загроможденной среде разработки с большим количеством установленных пакетов. Поиск действительно необходимых для проекта пакетов — непростая задача для выполнения вручную .
Пакеты не всегда обновляются одновременно, а многие из них несовместимы друг с другом или даже с используемой версией Python или Anaconda. Нет никаких гарантий, что пакеты из разных каналов в conda не будут конфликтовать. При загрузке всех элементов в одну большую среду возникновение противоречивых зависимостей неизбежно. Не говоря уже о различных инструментах, таких как pip, pipx, conda, poetry, hatch, pipenv, pyenv, virtualenv, pyvenv, pyenv-virtualenv, virtualenvwrapper, pyenv-virtualenvwrapper и venv… которые, несмотря на похожие названия, зачастую даже не совместимы друг с другом.
Поломка проекта при использовании Anaconda — вопрос времени
Еще одна причина не использовать anaconda вне контейнера — вы не знаете, что именно запускаете. В некоторых случаях сценарий активации anaconda настолько сильно искажает очистку среды системы pre-pyenv, что единственный способ быстро решить эту проблему — добавить HOST=$(hostname)
к .zshrc.
Виртуальные среды способствуют воспроизводимости результатов в науке о данных
При предоставлении точных версий библиотек, используемых в научном анализе, результаты будут лучше поддаваться проверке. Управление зависимостями может сыграть важную роль в отчетности и точности. Иногда ошибки в пакетах Python являются основной причиной вычислительных ошибок в статистических моделях. Отслеживание используемых пакетов также дает возможность при необходимости проверить или исправить полученные результаты.
pyenv в сочетании с pyenv-virtualenv для безопасного управления установками python
Здесь можно найти краткое руководство по настройке системы с помощью pyenv и pyenv-virtualenv. Преимущества такого способа управления:
- чистый, гибкий и реверсивный;
- устойчивый к ошибкам пользователей;
- хорошая защита от ошибок, возникающих в среде при работе с anaconda.
Для защиты важных файлов перед установкой новой системы с помощью этого метода также рекомендую использовать Arq Cloud Backup, который работает аналогично git и почти полностью автоматизирован.
Интегрированная среда разработки с pyenv и Visual Studio Code
После завершения установки pyenv можно приступать к созданию рабочих процессов в виртуальных средах. Рассмотрим создание проекта с дистрибутивом Anaconda, чтобы узнать, как можно использовать Visual Studio Code для разработки Jupyter notebooks и их конвертирования в сценарии .py.
У каждого проекта должна быть своя директория, а у каждой директории — своя виртуальная среда. Эта структура выполняет две важные функции:
- Обеспечивает правильную организацию всех элементов, что упрощает разделение проектов, управление зависимостями и исключает лишние элементы.
- Позволяет создать отдельный
.python-version file
для каждой директории (и, следовательно, для каждого проекта). Это означает, что pyenv-virtualenv может автоматически переключаться на соответствующую среду при смене директории.
TL;DR-версия для установки проекта:
- Создайте папку проекта и перейдите (
cd
) в нее. - Установите проект Python с помощью
pyenv local $PYTHON_VERSION
. - Запустите эту команду для создания виртуальной среды:
pyenv virtualenv anaconda3–2019.10 venv-cool_project
. Если версия Python не указана, то среда будет использовать ту, которая работает локально на данный момент. - Установите новую среду в качестве локального Python-проекта с помощью команды
pyenv local
с именем venv и активируйте ее с помощьюconda activate venv-cool_project
.
При запуске приведенного ниже однострочника при каждом создании нового проекта вы получаете возможность входить и выходить (cd
) из директорий, а виртуальные среды будут автоматически активироваться и деактивироваться (вам также нужно изменить имя среды и интерпретатор Python).
Ниже представлен GitHub gist со сценарием, который сделает всю работу за вас. Загрузите его (потребуется запустить chmod +x newproj.sh
, чтобы убедиться, что он выполняемый). Затем просто используйте его для создания новых проектов, передав ему нужную версию Python и имя проекта:
#!/bin/sh
# Usage: $ sh newproj.sh pythonversion projectname
mkdir $2 && cd $2 && pyenv local $1 && pyenv virtualenv venv-$2 && pyenv local venv-$2 && pyenv activate venv-$2
Visual Studio Code в сочетании с Python и Jupyter
Visual Studio Code сочетает в себе множество классных функций. Например, он может автоматически выбирать подходящий виртуальный интерпретатор для директории проекта, если вы установите его в соответствии с инструкциями выше.
Для начала воспользуемся brew cask install visual-studio-code
.
Затем переходим к настройкам VS Code:
- Убедитесь, что терминал системы синхронизирован с терминалом приложения: VS Code должен использовать приложение терминала вашей ОС с переменной «External».
- Включите встроенную функцию терминала, чтобы использовать эмулятор в приложении VSCode.
- Откройте палитру команд с помощью
⌘+⇧+P
и выберитеShell Command: Install 'code' command in PATH
. Таким образом вы запустите VS Code из внешнего терминала:code --
запускает приложение,code.
открывает текущую рабочую директорию, аcode path/to/file/or/dir
открывает определённый файл или директорию.
- Установите расширение Python для VS Code. Таким образом, при сохранении файла с расширением Python редактор будет знать, что нужно интерпретироваться в контексте Python.
При входе и выходе из директорий проектов в интегрированном терминале интерпретатор python автоматически определяет venvs при наличии файла .python-version
(файл должен существовать при правильном использовании pyenv-virtualenv).
Чтобы указать приложению, какой интерпретатор Python нужно использовать, нажмите на имя интерпретатора Python на нижней панели инструментов или откройте палитру команд и введите Python: Select Interpreter
.
Находясь в терминале, также можно создавать и активировать новые venvs привычным образом.
Создание Jupyter notebooks
Чтобы воспользоваться ноутбуками, просто откройте файл .ipynb
или выберите Python: Create New Blank Jupyter Notebook
из палитры команд, находясь в среде conda. Теперь можно запускать ячейки и создавать ноутбуки в обычном режиме, но с дополнительным преимуществом, которое не зависит от веб-браузера.
Ноутбук также можно конвертировать в сценарий Python одним щелчком мыши или с помощью Python: Convert to python script
:
Это удобный способ превращения разведочного анализа в готовые к выполнению, воспроизводимые программы.
Создавайте великолепные проекты с уверенностью
Мы рассмотрели управление пакетами в среде разработки, простое превращение conda envs в файлы requirements.txt и более эффективную очистку ноутбуков для создания работоспособных сценариев. VS Code предлагает еще больше инструментов, таких как подсветка синтаксиса, линтинг, интеграция тестов и интерфейсы с GitHub, Docker, различными базами данных и многим другим для активизации проектов. Добавьте эти инструменты в рабочий процесс науки о данных, чтобы стать более эффективным программистом и разработчиком!
Читайте также:
- Автоматизация работы с Python
- 10 рекомендаций по ускорению рабочего процесса в Visual Studio Code
- Элегантное ООП в Python
Перевод статьи Lora Johns: Power up your Python Projects with Visual Studio Code