Подружим Spyder и виртуальные окружения Python
Те, кто любит программировать и из раза в раз сталкивается с проблемой настройки среды — эта статья для вас! Да, насколько приятно созидать работающий код, настолько угнетает необходимость устранения постоянно возникающих капризов оболочек для разработок. Однако, по опыту, лучше один раз разобраться с наболевшей проблемой, чем постоянно пользоваться обходными путями и зря тратить время. Предлагаю разобраться, как использовать инструментальную среду для научных вычислений Spyder с различными виртуальными окружениями Python (как их создавать детально описано здесь ).
Сам я для программирования на Python использую две оболочки: PyCharm и Spyder, так как каждая обладает своими преимуществами. Так, PyCharm позволяет отлаживать многопоточное приложение, имеет хороший просмотрщик (viewer) объектов и сохраняет привлекательное форматирование при копировании кода в текстовые редакторы. В то же время Spyder позволяет в ходе отладки взаимодействовать с ipython и временными объектами, доступными из точки останова (подробнее о настройке и преимуществах этих сред читай здесь ).
Одним из распространенных способов работы Spyder с различными виртуальными окружениями является установка его вместе с другими библиотеками в каждую среду. Но это порождает множественные копии пакета и не очень удобно, так как все равно каждый экземпляр Spyder запоминает файлы открытые предыдущим, что может привести к путанице (фактически открыт один проект, а интерпретатор — из другого).
Рассмотрим новый способ совместной работы Spyder с виртуальными окружениями. Для этого требуется осуществить следующие шаги:
- установить новый пакет Spyder в базовую среду (conda install spyder или pip install spyder);
- установить пакет spyder-kernels в целевое виртуальное окружение (conda activate myenv или source myenv/bin/activate, или workon myenv, затем conda install spyder-kernels или pip install spyder-kernels);
- получить путь до интерпретатора командами: python -c «import sys; print(sys.executable)»;
- запустить Spyder из базовой среды и задать в настройках интерпретатора (Tools->Preferences > Python Interpreter > Use the following interpreter, см. изображение ниже) путь из 4;
- перезапустить консоль ipython (в правом нижнем углу).
Забавно, что при настройке данным способом столкнулся с проблемой несовместимости пакетов spyder-kernels и spyder. В частности, я проделал следующие шаги:
- установил новый пакет Spyder в базовую среду Anaconda (conda install spyder);
- установил пакет spyder-kernels в два целевых виртуальных окружения (conda activate имя_окружения; conda install spyder-kernels);
Еще интереснее то, что осуществление одних и тех действий привело к различным результатам. Так, в базовом комплекте установился spyder 4.1.4, при этом в одной виртуальной среде — spyder-kernels 1.9.2 (где, все заработало), а в другой — spyder-kernels 1.9.4 (выполнение сценария выдает ошибку, см. рисунок ниже).
Поиск ошибки привел к статье , где указано, что для версии Spyder 4.1.4 следует использовать spyder-kernels 1.9.3, а для Spyder 4.1.5 — spyder-kernels 1.9.4.
Далее командой pip list | grep ‘spyder’ (из активного виртуального окружения) я вывел версии пакетов и обнаружил ошибку:
То есть менеджер пакетов, обнаружив в виртуальном окружении Spyder (раньше я пользовался первым способом работы Spyder путем его установки в каждое виртуальное окружение), по умолчанию устанавливает совместимый с ним пакет spyder-kernels. Однако наша задача заключается не в этом, а в том, чтобы получить spyder-kernels совместимый со Spyder в базовом комплекте!
Таким образом, для тех, кто имеет в виртуальном окружении уже установленный Spyder следует быть особо внимательным и загружать spyder-kernels нужной версии. Попытаемся теперь получить в каждом окружении совместимый со Spyder из базового комплекта spyder-kernels. Для этого нам понадобятся следующие команды:
conda install имя_библиотеки=номер_версии
pip install -U имя_библиотеки==номер_версии
Например, в окружении scraper можно набрать:
conda install spyder-kernels=1.9.3
Если вы захотите удалить Spyder из виртуального окружения, то после его активации наберите:
conda uninstall spyder или pip uninstall spyder
Однако в этом случае spyder-kernels нужно будет опять устанавливать.
Вот с такими капризами при налаживании совместной работы Spyder и виртуальных окружений я столкнулся. А вы делитесь в комментариях своим опытом преодоления проблем. Так мы сэкономим время другу другу!
Настраиваем среду для работы с Python
В этой статье я расскажу о наиболее простых путях установки и использования сред программирования на языке Python. Прежде всего требуется инсталлировать интерпретатор Python. Это можно сделать двумя способами:
- с нуля, скачав первоисточник с сайта www.python.org/downloads . Впоследствии придется самостоятельно добавлять все необходимые для работы продукты (например, pip – установщик библиотек, virtualenv – инструмент для создания виртуальных сред)
- установить готовую сборку с дополнительными возможностями (Anaconda, Miniconda, WinPython)
В обоих случаях рекомендуется сразу после установки добавить путь к интерпретатору Python в системную переменную Path.
В первом случае для установки pip и virtualenv потребуется набрать команды:
python -m pip install –upgrade pip
pip install virtualenv
Первый инструмент необходим для установки сторонних библиотек, а второй – виртуальной среды для проекта (папки с копией интерпретатора python и необходимых модулей). Польза последней заключается в том, что она позволяет изолировать новый проект и его модули от уже существующих, чтобы не возникало конфликтов между требуемыми для их работы библиотеками и их версиями.
После данных действий для нового проекта потребуется создать виртуальную среду. Для этого создаем папку с именем проекта и подпапку в ней, где будет располагаться виртуальная среда, затем в командной строке переходим в папку, где создана виртуальная среда (интерпретатор_python\Scripts), и набираем – virtualenv путь_к_подпапке.
Перед началом работы с проектом всякий раз активируем виртуальную среду командой activate (из папки — имя_проекта\имя_вирт_среды\Script). После работы деактивировать среду можно аналогичным путем, набрав deactivate.
Рассмотренный способ работы с Python сопряжен с проблемами отсутствия поддержки между различными версиями библиотек, что может сильно затруднить их установку. Например, я мучился с инсталляцией инструментальной среды для научных вычислений Spyder.
Второй способ легче и рекомендую пользоваться им, так как это сэкономит время и нервы. Я установил дистрибутив Anaconda ( www.anaconda.com/products/individual ), имеющий ряд готовых к работе библиотек и предлагающий дополнительные инструменты (virtualenv, pip устанавливать не понадобится).
Виртуальную среду можно создать, перейдя на вкладку Environments на левой боковой панели и нажав create в левом нижнем углу. Появится список виртуальных сред с активированной — под названием «base (root)»:
Затем прямо из графической оболочки можно установить пакеты для виртуальной среды либо, вернувшись на вкладку Home, – дополнительные инструменты, например, графическую оболочку разработки Spyder. Это можно сделать и через командную строку, в которую можно перейти с текущей активированной виртуальной среды, нажав стрелочку напротив ее имени (в этом случае установить Spyder следует посредством команды – conda install spyder). Впоследствии можно запускать Spyder из вкладки Home.
Для начала работы следует создать новый проект (вкладка Projects) и затем добавлять в него файлы .py.
Следует отметить, что Spyder является моим основным средством разработки, так как он позволяет легко отлаживать код, пошагово выполнять команды (даже во время отладки). Его недостатком является отсутствие поддержки отладки в многопроцессорном режиме и несовершенные средства визуализации переменных (например, полей созданных классов). Поэтому для этих целей я одновременно использую среду разработки PyCharm, установщик к которой можно скачать с сайта разработчика www.jetbrains.com/ru-ru/pycharm/ . Для ее работы необходим базовый интерпретатор python, который можно получить первым способом или использовать имеющийся в Anaconda.
При создании проекта автоматически создается виртуальная среда, для которой указывается путь к базовому интерпретатору python. Если отметить галочку «Inherit global site-packages», то будут установлены пакеты, имеющиеся в наборе базового интерпретатора (например, pip).
Для пошагового выполнения команд в PyCharm рекомендую установить командную оболочку Ipython (в Anaconda имеется, соответственно, для Spyder будет доступна без установки). Для этого перейти в терминал (левый нижний угол) и набрать pip install ipython.
Также рекомендую набрать pip install jupyter для установки Jupyter – среды выполнения интерактивных задач в веб блокноте, позволяющей сочетать подачу информации в текстовой форме и исполняемых ячеек кода с поддержкой вывода результатов. Тем самым Jupyter дает возможность делиться скриптами и облегчает приготовление презентаций. Для запуска нужно в терминале набрать jupyter notebook.
Об особенностях работы с Ipython и Jupyter расскажу в других статьях. Напоследок перечислю полезные команды для дальнейшей работы:
Проверка версий и получение служебной информации:
имя_библиотеки.__version__ (набирается в интерпретаторе, предварительно возможно понадобится импортировать библиотеку import имя_библиотеки)
import sys; sys.path (набирается в интерпретаторе, список путей поиска модулей)
установка списка библиотек из файла requirements.txt
pip install -r requirements.txt
обновление библиотеки до последней версии
pip install имя_библиотеки –upgrade
pip install -U имя_библиотеки
обновление библиотеки до заданной версии
pip install -U имя_библиотеки==номер_версии
Установка Python 3 и Spyder
Цель: понять, кто такие Data Scientist-ы, и чем они занимаются.
Будем учиться предсказаниям.
Способ достижения: Изучаем Python 3.
Изучать будем в Debian. Для начала установим Python 3:
$ sudo apt-get install python3
В качестве IDE будем использовать Spyder (мы же собираемся стать крутыми дата-сатанистами Data Scientist-ами):
$ sudo apt-get install spyder
Spyder — специальная IDE для научных вычислений на Python.

Выглядит неплохо. Но в заголовке написано, что используется Python 2.7. Мы же хотим изучать более современный Python 3.
Оказывается, что существует ещё и пакет spyder3. Устанавливаем его:
$ sudo apt-get install spyder3
Запускаем (обратите внимание на цифру 3 после spyder):

Теперь всё ок. В левую часть окна напишем нашу первую программу:
print ( ‘Hello, world!’ )
Нажмите F5 на клавиатуре, либо в главном меню Запуск → Запуск. В появившемся диалоговом окне может потребоваться нажать «Запуск» ещё раз.
Вот что должно примерно получиться:

В следующих статьях попробуем изучить синтаксис Python.
Неизвестный путь
Просмотр значений переменных
Пожалуй одно из главных фишек — возможность удобной работы с переменными. В процессе выполнения программы они выводятся на панели в виде списка с возможностью просмотра их значений. Имеется даже возможность строить графики по данным массива. Очень удобно при отладке программы и поиске логических ошибок.

Список переменных

Просмотр массива numpy и редактирование значения элемента
Встроенная консоль
Spyder предоставляет большие возможности по работе с консолями Python или IPython. Можно создавать требуемое количество консолей и взаимодействовать с ними как с отдельными процессами. Ваши программы могут запускаться в новой или в существующей консоли.

Интеграция matplotlib и formlayout
При запуске программ, использующих для визуализации библиотеку matplotlib появляется возможность редактировать параметры графика, например легенду, параметры осей, подписи, стили линий с помощью формы, реализуемой библиотекой formlayout. Это удобно, так как не требуется перезапускать программу чтобы просто изменить параметры оси или что-то подобное.

Настройка внешнего вида графика matplotlib с помощью формы formlayout
Мгновенный анализ на ошибки
С помощью pyflakes в реальном времени код программы проверяется на ошибки, и в случае их нахождения пользователь получает подсказки.

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

автодополнение

просмотр кода функции
Работа с документацией
Имеется возможность просмотра документации или исходных кодов любых объектов Python (классов, функций, модулей). Также доступна онлайн документация модулей Python (сгенерированная в формат html). Для документации в Python используется библиотека Sphinx. Очень удобная опция, позволяющая лишний раз не лезть в интернет за информацией о библиотечных функциях.


Более полное описание возможностей Spyder можно найти на официальном сайте проекта.
- Google code — Spyderlib
- Spyder — Documentation
- Python(x,y) — дистрибутив для научных и инженерных расчетов
- Python(x, y) — Хабрахабр
