Среда для вычислений на Python

В общих чертах, формирование вычислительной среды на базе языка программирования Python описано в одном из разделов сайта. Здесь будут рассмотрены некоторые аспекты удобства ее организации на базе Linux.

Какие требования мы бы хотели предъявить к вычислительной среде:

  1. изолированность — выполняя работы над каким-либо проектом, хотелось бы иметь независимый и не влияющий на системные библиотеки набор модулей, не беспокоясь, что если мы вдруг что-либо переустановим в системе, то это никак не скажется на работоспособности выполняемого проекта;
  2. удобство конфигурирования вплоть до используемой версии Python; последнее особенно важно, если разработка проекта ведется на версии Python, отличающейся от установленной по умолчанию в системе (здесь прежде всего имеются ввиду операционные системы семейства UNIX, LINUX);

Обеспечить изолированность проекта на языке Python призвана утилита virtualenv, назначение которой создание виртуальных окружений. Она включенна по умолчанию в Python 3.x в качестве модуля venv. Однако использование virtualenv не позволяет с легкостью переключаться между версиями Python. В этом случае управление несколькими версиями Python, а также переключение между ними и связанными с ними виртуальными окружениями, может представлять некоторые организационные трудности. На преодоление этих трудностей направлен проект pyenv — существенно упрощающий решение вышеупомянутых задач 1) и 2).

C pyenv действительно удобно работать! По умолчанию, он позволяет организовать удобное управление переключением между версиями используемого интерпретатора Python, а если установить дополнительное расширение, позволяеющее создавать виртуальные окружения, все становится еще намного проще. Для каждой установленной версии можно создавать независимые наборы виртуальных окружений. Более того, можно настроить их автоматическую активацию при переходе в определенную папку. Теперь об "обычных"  виртуальных окружениях можно забыть (т.е. забыть команду source env/bin/activate... etc)

Весь процесс установки pyenv — это фактически копирование репозитория в домашний каталог. Для этого, если установлен git (а если не установлен,  рекомендуется установить), достаточно выполнить в терминале:

 git clone https://github.com/yyuu/pyenv.git ~/.pyenv

Далее, следует добавить пару строк в скрипт настроек запуска терминала (его название может отличаться от .bash_profile, например, у меня в OpenSuse это .bashrc), что можно сделать выполнив здесь же:

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

Все, pyenv установлен, теперь можно создавать окружения с различными версиями Python. Чтобы иметь возможность создавать виртуальные окружения для каждой версии Python достаточно установить плагин для pyenv: pyenv-virtualenv. Для этого нужно выполнить следующие команды — собственно скопировать плагин и добавить его инициализацию в файл конфигурации текущего окна терминала.

git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

Создание новых окружений начинается с создания рабочей директории.

mkdir myproject

cd myproject

Установим Python 3.5.2:

pyenv install 3.5.2

Создадим виртуальное окружение на базе 3.5.2:

pyenv virtualenv 3.5.2 sci

Наше виртуальное окружение называется sci, оно, наряду с установленным Python 3.5.2 хранится в папке .pyenv. Чтобы активировать виртуальное окружение в текущей папке, т.е. в папке myproject нужно выполнить

pyenv local sci

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

Теперь всякий раз, когда мы будем переходить в папку myproject будет автоматически активироваться наше виртуальное окружение sci с Python 3.5.2. Стандартным менеджером pip в это виртуальное окружение можно установить необходимый набор пакетов.

У меня это:

pip install numpy scipy matplotlib scikit-learn Pillow scikit-image pandas networkx seaborn jupyter ipython xlrd xlwt

Важно заметить, что для установки scipy и numpy нужны исходники библиотек линейной алгебры blas или LAPACK, для работы scikit-learn необходимо, чтобы Python-окружение было собрано с поддержкой bz2 (по состоянию на 2016 г, возможно в последующих версиях импорт scikit-learn в Python без bz2 не будет приводить к ошибке). Таким образом, перед созданием окружений Python, важно убедиться, что исходники bz2-devel, Tk-devel (для работы Tkinter), и возможно что-то еще... установлены в системе.

Также удобно создать alias-команду notebook для быстрого запуска сервера jupyter и работы над проектом по анализу данных в окне браузера.

echo 'alias notebook="ipython notebook --ip=127.0.0.1"' >> ~/.bash_profile

Теперь, чтобы запустить python notebook достаточно в папке текущего проекта выполнить notebook.

blog comments powered by Disqus