Подружим 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 и виртуальных окружений я столкнулся. А вы делитесь в комментариях своим опытом преодоления проблем. Так мы сэкономим время другу другу!