Найти тему
Властелин машин

Подружим Spyder и виртуальные окружения Python

Те, кто любит программировать и из раза в раз сталкивается с проблемой настройки среды - эта статья для вас! Да, насколько приятно созидать работающий код, настолько угнетает необходимость устранения постоянно возникающих капризов оболочек для разработок. Однако, по опыту, лучше один раз разобраться с наболевшей проблемой, чем постоянно пользоваться обходными путями и зря тратить время. Предлагаю разобраться, как использовать инструментальную среду для научных вычислений Spyder с различными виртуальными окружениями Python (как их создавать детально описано здесь).

Сам я для программирования на Python использую две оболочки: PyCharm и Spyder, так как каждая обладает своими преимуществами. Так, PyCharm позволяет отлаживать многопоточное приложение, имеет хороший просмотрщик (viewer) объектов и сохраняет привлекательное форматирование при копировании кода в текстовые редакторы (например, в Яндекс Дзен). В то же время Spyder позволяет в ходе отладки взаимодействовать с ipython и временными объектами, доступными из точки останова (подробнее о настройке и преимуществах этих сред читай здесь).

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

Рассмотрим новый способ совместной работы Spyder с виртуальными окружениями. Для этого требуется осуществить следующие шаги:

  1. установить новый пакет Spyder в базовую среду (conda install spyder или pip install spyder);
  2. установить пакет spyder-kernels в целевое виртуальное окружение (conda activate myenv или source myenv/bin/activate или workon myenv, затем conda install spyder-kernels или pip install spyder-kernels);
  3. получить путь до интерпретатора командами: python -c "import sys; print(sys.executable)";
  4. запустить Spyder из базовой среды и задать в настройках интерпретатора (Tools->Preferences > Python Interpreter > Use the following interpreter, см. изображение ниже) путь из 4;
  5. перезапустить консоль ipython (в правом нижнем углу).

-2

Забавно, что при настройке данным способом столкнулся с проблемой несовместимости пакетов spyder-kernels и spyder. В частности, я проделал следующие шаги:

  1. установил новый пакет Spyder в базовую среду Anaconda (conda install spyder);
  2. установил пакет spyder-kernels в два целевых виртуальных окружения (conda activate имя_окружения; conda install spyder-kernels);

Еще интереснее то, что осуществление одних и тех действий привело к различным результатам. Так, в базовом комплекте установился spyder 4.1.4, при этом в одной виртуальной среде - spyder-kernels 1.9.2 (где, все заработало), а в другой - spyder-kernels 1.9.4 (выполнение сценария выдает ошибку, см. рисунок ниже).

-3

Поиск ошибки привел к статье, где указано, что для версии Spyder 4.1.4 следует использовать spyder-kernels 1.9.3, а для Spyder 4.1.5 - spyder-kernels 1.9.4.

Далее командой pip list | grep 'spyder' (из активного виртуального окружения) я вывел версии пакетов и обнаружил ошибку:

-4

То есть менеджер пакетов, обнаружив в виртуальном окружении 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

-5

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

conda uninstall spyder или pip uninstall spyder

Однако в этом случае spyder-kernels нужно будет опять устанавливать.

Вот с такими капризами при налаживании совместной работы Spyder и виртуальных окружений я столкнулся. А вы делитесь в комментариях своим опытом преодоления проблем. Так мы сэкономим время другу другу!


Наука
7 млн интересуются