Введение 

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

У многих из нас эта привычка формировалась годами с момента обучения программированию. Сначала мы учились устанавливать на ПК сам Python, а затем напрямую в систему  —  его пакеты. Чем больше мы с ним работали, тем большее число различных пакетов требовалось для решения широкого спектра задач, но по ходу стали возникать определенные сложности. 

Пакет А зависит от пакета В с версией 2.0, поэтому вместе с первым из них на системном уровне устанавливается и второй. Однако другому проекту требуется пакет С, зависящий от пакета В с версией 2.5. При установке С в соответствии с его требованиями система обновит В до версии 2.5. Но вот обновление пакета А для взаимодействия с пакетом В 2.5 не произошло, что чревато проблемами на этапе работы с A. 

С такого рода сложностями рано или поздно сталкиваются многие начинающие программисты Python. Помимо конфликтов зависимостей есть еще проекты, требующие разных его версий. Например, возможна ситуация, в которой ранее разработанные проекты продолжают использовать Python 2.x, а большинство других  —  3.x. При этом некоторые из тех, что придерживаются версии 3.x., могут работать с Python 3.4, а другие требуют 3.5+. Следовательно, если для всех проектов на системном уровне установлен только Python, то конфликты его версий могут стать камнем преткновения. 

В такой ситуации на помощь приходят среды Conda . Conda  —  это комплексный инструмент управления пакетами и средой, востребованный специалистами по данным. Кроме того, он оптимизирует библиотеки, связанные с наукой о данных, такие как NumPy, SciPy и TensorFlow, которые максимально увеличивают производительность имеющегося оборудования для обеспечения наилучшей вычислительной мощности (более подробная информация предоставлена на сайте Conda). Этот инструмент позволяет создавать изолированные среды для проектов, которые могут включать не только разные пакеты, но даже разные версии Python. 

С подробной инструкций установки Conda на ПК можно ознакомиться на официальном сайте. Различают две версии данного инструмента: более компактный Miniconda, предоставляющий Conda и его зависимости, и Anaconda, включающий гораздо большее число пакетов, необходимых в научных исследованиях. После установки Conda вы можете выполнить следующую команду в терминале (или в другом инструменте командной строки на свое усмотрение): 

conda --version

В результате вы увидите версию Conda, установленную на вашем ПК. А это значит, что у нас все готово для работы. Далее мы рассмотрим важнейшие команды для управления средами в большинстве случаев. 

1. Проверка доступных сред 

Для начала выясним, какие среды находятся в нашем распоряжении. Выполняем следующую команду: 

conda env list

Предположим, вы только что установили Conda, тогда непременно увидите вот такой результат: 

# среды conda 
# 
base * /opt/anaconda3
  • base —  среда по умолчанию, созданная Conda в процессе установки. 
  • Символ * указывает на то, что эта конкретная среда является активной. 
  • Путь показывает физическую директорию среды и связанные с ней пакеты. 

Вышеуказанная команда проверки применяется для обзора сред Conda, доступных на ПК.  

2. Создание новой среды 

Для создания новой среды существует следующая команда:

conda create --name firstenv
  • Флаг --name говорит о намерении указать имя новой среды. В данном случае она будет называться firstenv.
  • Вместо --name возможен краткий вариант -n.

Эту команду можно расширить, чтобы установить дополнительные пакеты в процессе создания среды, к примеру NumPy и Requests

conda create -name firstenv numpy requests

Более того, у нас даже есть возможность указать конкретные версии этих пакетов, как показано ниже: 

conda create -n firstenv numpy=1.19.2 requests=2.23.0

После установки можно удостовериться в успешном создании среды с помощью команды conda env list, отображающей firstenv в списке. 

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

3. Активация среды 

Как только вы создали среду, самое время в нее войти. На профессиональном языке этот процесс называется “активацией”. Выполняем код: 

conda activate firstenv

После выполнения вы заметите, что в начале строки появилось название среды (firstenv) или (your-own-env-name) в случае выбора другого имени, как показано ниже: 

(firstenv) your-computer-name:directory-path your-username$

Поскольку среда firstenv уже активирована, попробуйте ради интереса снова выполнить conda env list. Вы увидите, что в строке firstenv появится символ *

# среды conda: 
# 
base /opt/anaconda3 
firstenv * /opt/anaconda3/envs/firstenv

4. Установка, обновление и удаление пакетов

В уже существующей среде вы можете установить дополнительные пакеты, которые забыли указать при ее создании. Для этого существуют несколько способов в зависимости от доступности пакетов. 

Сначала попробуем выполнить команду, устанавливающую пакет из предустановленного канала Anaconda. Отметим, что при желании вслед за именем пакета можно указать его версию. 

conda install pandas

Однако в канале Anaconda может не оказаться конкретного пакета. В таком случае есть вариант с применением стандартного канала conda-forge, как показано ниже. --channel или просто -c обозначает канал, из которого извлекается пакет.  

conda install -c conda-forge opencv

Еще один важный канал  —  широко известный PyPI (каталог пакетов Python), доступный через инструмент управления пакетами pip, нативно поддерживаемый Conda. Рассмотрим простой пример: 

pip install pandas

Несмотря на то, что пакеты можно установить из множества каналов, желательно брать их из Anaconda, так как здесь их производительность была оптимизирована наилучшим образом. Дополнительная информация о каналах доступна на сайте

В зависимости от установочного канала для обновления пакета достаточно лишь заменить install на команду update

Для удаления пакета воспользуйтесь командой uninstall, как показано ниже. Отметим, что иначе она называется remove, например conda remove pandas.

conda uninstall pandas

5. Проверка установленных пакетов 

По ходу работы в среде число пакетов возрастает, и в какой-то момент возникает необходимость проверить, какие из них уже установлены. Для этого выполняем следующую команду: 

conda list

В результате вы увидите подобное: 

# пакеты в среде в /opt/anaconda3/envs/firstenv:
#
# Имя                     Версия           Сборка  Канал
appnope                   0.1.2                    pypi_0    pypi
backcall                  0.2.0                    pypi_0    pypi
blas                      1.0                         mkl  
brotlipy                  0.7.0           py38h9ed2024_1003  
bzip2                     1.0.8                hc929b4f_4    conda-forge
c-ares                    1.17.1               hc929b4f_0    conda-forge
ca-certificates           2020.12.5            h033912b_0    conda-forge
cairo                     1.16.0            h4ec454a_1007    conda-forge
certifi                   2020.12.5        py38h50d1736_1    conda-forge
cffi                      1.14.5           py38h2125817_0  
chardet                   4.0.0           py38hecd8cb5_1003  
cryptography              3.3.1            py38hbcfaee0_1  
...

Обратите внимание, что список указывает, из какого канала устанавливаются пакеты. В данном случае в нашем распоряжении пакеты из PyPI и conda-forge. Отсутствие информации о канале означает, что по умолчанию пакеты устанавливаются из Anaconda. 

Если чрезмерная длина списка усложняет поиск конкретного пакета, можно проверить информацию только по одному, выполнив команду: 

conda list opencv

6. Деактивация среды 

Закончив работу, вы покидаете текущую среду или, опираясь на терминологию, деактивируете ее. Для этой цели существует команда: 

conda deactivate

Вы заметите отсутствие префикса (firstenv) в сообщении командной строки. Ради интереса можете выполнить conda env list, чтобы убедиться, что среда firstenv больше не обозначена символом *, указывающим на ее активность.  

7. Воссоздание сред 

Воспроизводимость  —  вот главная цель, к достижению которой стремятся Conda и другие инструменты управления средой, чтобы обеспечить качественное выполнение кода не только на личном ПК, но и на машинах коллег по команде. Вот почему так важно иметь возможность воссоздавать ту же самую среду на другом компьютере. Рассмотрим несколько полезных команд, применяемых для этой цели. 

Как только вы вошли в виртуальную среду, выполните: 

conda env export > environment.yml

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

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

conda env create -f environment.yml

Флаг -f говорит о намерении создать среду из конкретного файла. Перейдите в директорию, содержащую environment.yml, и выполните команду conda env create

8. Удаление сред 

Для удаления среды, в которой больше нет необходимости, выполняем команду:

conda remove -n firstenv -all
  • Флаг -n указывает на имя среды. 
  • Флаг -all означает, что будут удалены не только все пакеты, но и сама среда.

Ради интереса выполните conda env list, чтобы убедиться, что удаление среды прошло успешно. 

Заключение 

В статье были рассмотрены 8 основных команд Conda (но фактически их было больше). Надеюсь, они помогут вам начать работу с этим инструментом для управления средами в проектах науки о данных. Подведем краткие итоги:

  • Создавайте новую среду для каждого проекта. О пространстве на диске можете не беспокоиться, поскольку среда много места не занимает. 
  • Устанавливайте как можно больше пакетов при создании среды во избежание конфликтов зависимостей. 
  • Используйте альтернативные каналы, если Anaconda не предоставляет нужные пакеты. Однако он всегда должен рассматриваться как приоритетный. 
  • Рассмотрите вариант передачи среды для воспроизведения ее аналога с теми же пакетами. 

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен


Перевод статьи Yong Cui: 8 Essential Commands to Get Started With Conda Environments

Предыдущая статья10 актуальных профессий в области науки о данных
Следующая статьяПочему ведущие инженеры ненавидят собеседования