Вам когда-нибудь требовалась изолированная среда помимо вашей основной среды Python, для управления различными версиями зависимостей вашего проекта?

Именно здесь в игру вступает виртуальная среда.

Виртуальная среда – это инструмент, используемый для управления зависимостями, необходимыми для разных проектов, по отдельности путем создания для них изолированных виртуальных сред. Это часто используется большинством разработчиков Python.

В этом уроке мы научимся создавать и управлять виртуальными средами для нашего проекта отдельно. Каждая созданная среда будет способна обрабатывать разные версии зависимости и версии Python.

Что такое виртуальная среда?

Ну, до сих пор у вас есть довольно хорошее представление о виртуальной среде.

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

Зачем нам виртуальная среда?

Зачем мы используем виртуальную среду, если не знаем, зачем она нам нужна?

Предположим, вы работаете над двумя проектами Python, основанными на веб-скрапинге. Допустим, application_X и application_Y, где application_X использует beautifulsoup4=4.11.1, а application_Y использует beautifulsoup4=4.10.0. В этом случае зависимости будут конфликтовать, и установка версии 4.11.1 или 4.10.0 приведет к невозможности запуска одного из приложений. .

В таких ситуациях виртуальные среды могут быть очень полезны для управления различными зависимостями для обоих проектов.

Рекомендуется использовать в своем проекте виртуальную среду, чтобы ваши проекты не конфликтовали друг с другом в отношении зависимостей и версий Python.

Как работает виртуальная среда?

По умолчанию внешние пакеты, которые мы устанавливаем с помощью pip в нашей базовой среде Python, находятся в папке с именем site-packages/

.
└── Python/
    ├── include
    ├── Lib/
    │   └── site-packages/
    │       ├── asgiref-3.5.2.dist-info 
    │       ├── beautifulsoup4-4.11.1.dist-info
    │       ├── certifi-2022.6.15.dist-info
    │       ├── Django-4.0.6.dist-info
    │       ├── django
    │       ├── Flask-2.1.2.dist-info
    │       └── flask
    ├── libs
    ├── Scripts
    ├── tcl
    └── Tools

Когда мы создаем виртуальную среду с помощью venv, она воссоздает структуру файлов и папок стандартной установки Python в нашей ОС.

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

Символическая ссылка — это символическая ссылка, которая указывает на другой файл и папку на нашем компьютере или в подключенной файловой системе. Таким образом, когда мы создаем нашу виртуальную среду, эта виртуальная среда указывает на файл и папку стандартной установки Python для создания своей среды.

Структура папок выглядит так, когда мы создаем нашу виртуальную среду.

D:
│   pyvenv.cfg
│
├───Include
├───Lib
│   └───site-packages
│       │   distutils-precedence.pth
│       ├───pip
│       ├───pip-22.0.4.dist-info
│       ├───pkg_resources
│       ├───setuptools
│       ├───setuptools-58.1.0.dist-info
│       └───_distutils_hack                  
│
└───Scripts
        activate
        activate.bat
        Activate.ps1
        deactivate.bat
        pip.exe
        pip3.10.exe
        pip3.exe
        python.exe
        pythonw.exe

Чтобы просмотреть дерево каталогов, выполните следующие действия:

  1. cd в каталог виртуальной среды в вашем терминале.
PS> cd your/virtual/environment/dir

2. Затем запустите следующую команду в своем терминале.

PS> tree /F

Приведенная выше команда создаст дерево каталогов со всеми файлами. Однако дерево, сгенерированное этой командой, будет очень длинным.

Настройка виртуальной среды

Помните, что наши два приложения, application_X и application_Y, используют разные версии Beautiful Soup v4.11.1 и v4.10.0 соответственно. Если мы попытаемся установить v4.10.0 для application_Y и v4.11.1 для application_X глобально, то v4.10.0 будет перезаписан.

PS> python -m pip install beautifulsoup4==4.10.0
PS> python -m pip list

Package            Version
------------------ -----------
beautifulsoup4     4.10.0
PS> python -m pip install beautifulsoup4==4.11.1
PS> python -m pip list

Package            Version
------------------ -----------
beautifulsoup4     4.11.1

Но это не будет проблемой с виртуальной средой, если мы создадим для обоих приложений.

Создание виртуальной среды

Чтобы создать виртуальную среду, мы будем использовать модуль Python venv.

PS> python -m venv my_venv

Как и в приведенной выше команде, мы можем создать две отдельные виртуальные среды для наших application_X и application_Y.

Создание нескольких виртуальных сред одновременно

PS> python -m venv application_X application_Y

Приведенная выше команда создаст две отдельные виртуальные среды в одном каталоге. Мы также можем указать разные пути для наших виртуальных сред.

PS> python -m venv application_X your/full/path/to/directory/application_Y

Например, я создаю application_A в корневом каталоге и другое приложение в подкаталоге с именем app_b_path.

Тогда будет команда -

PS> python -m venv application_A D:\SACHIN\Pycharm\Virtual_environment\app_b_path\application_B

Посмотрите на структуру папок созданных нами виртуальных сред.

Активация виртуальной среды

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

Простая команда для активации любой виртуальной среды — выполнить сценарий, который поставляется вместе с установкой.

PS> Scripts\activate 
(application_A) PS>

Примечание. Перед выполнением вышеуказанной команды измените каталог на виртуальную среду.

Или мы можем запустить команду ‹virtual_environment_directory/Scripts/activate› из корневого каталога.

PS> application_X\Scripts\activate 
(application_X) PS>

Установка в него пакетов

Теперь, когда мы создали две отдельные виртуальные среды для нашего application_X и application_Y, мы можем установить внешние зависимости, которые мы потребность в нашем проекте.

Активация application_X и установка v4.11.1 из beautifulsoup4

PS> application_X\Scripts\activate

(application_X) PS> pip install beautifulsoup4==4.11.1

(application_X) PS> pip list

Package        Version
-------------- -----------
beautifulsoup4 4.11.1
pip            22.0.4
setuptools     58.1.0
soupsieve      2.3.2.post1

Активация application_Y и установка v4.10.0 из beautifulsoup4

PS> application_Y\Scripts\activate

(application_Y) PS> pip install beautifulsoup4==4.10.0

(application_Y) PS> pip list

Package        Version
-------------- -----------
beautifulsoup4 4.10.0
pip            22.0.4
setuptools     58.1.0
soupsieve      2.3.2.post1

Мы использовали pip для установки зависимости точно так же, как глобально при стандартной установке Python. Поскольку мы создали и активировали виртуальные среды, pip установит зависимость в изолированном расположении.

Теперь вы понимаете, как мы можем управлять различными версиями зависимостей и избегать загрязнения системы или конфликтов между внешними пакетами.

Деактивировать виртуальную среду

После завершения работы с виртуальной средой ее необходимо деактивировать.

(application_Y) PS> deactivate 
PS>

После выполнения команды deactivate ваша командная строка вернется в нормальное состояние. Это означает, что вы успешно вышли из виртуальной среды, и если вы продолжите использовать Python или pip в командной строке, вы будете напрямую взаимодействовать с глобально установленным Python.

Другие популярные варианты

Модуль Python venv — отличный инструмент для работы с виртуальными средами, и его главное преимущество заключается в том, что он предустановлен вместе с Python. Но есть и другие популярные варианты.

  1. Виртуальная среда
  2. Конда

Виртуалэнв

Это инструмент для создания изолированных сред Python. Virtualenv предоставляет некоторые замечательные функции, которые не предоставляет типичный встроенный модуль venv.

  • Скорость имеет значение. Это создает виртуальную среду быстрее.
  • Автоматически обнаруживает установленную версию Python.
  • Инструменты можно обновить с помощью pip

Глобальная установка пакета virtualenv.

PS> pip install virtualenv

Создание виртуальной среды с помощью virtualenv и ее активация.

PS> virtualenv my_virtualenv

PS> ls

Mode            LastWrite        Time         Length   Name
----            ----------       ---          ------   ----
d-----          8/4/2022         6:07 PM               my_virtualenv
PS> my_virtualenv/Scripts/activate

(my_virtualenv) PS>

Если виртуальная среда не активируется, попробуйте изменить Политику выполнения вашей системы.

Для Windows PowerShell

PS> Set-ExecutionPolicy Unrestricted -Scope Process

Эта команда снимет ограничение для текущего процесса.

Конда

Conda — это пакет с открытым исходным кодом и система управления средой, которая работает в Windows, macOS и Linux. Он поставляется с Anaconda Python Distribution. Он был создан в первую очередь для программ на Python, но позже расширил поддержку большинства языков программирования.

Мы также можем установить conda в нашей системе с помощью Miniconda installer, который обеспечивает минимальные требования к запуску conda в нашей системе.

Conda легко создает, сохраняет, загружает и переключается между средами на нашем локальном компьютере.

После загрузки Anaconda или Miniconda выполните следующие действия.

Anaconda поставляется с подсказкой PowerShell под названием Подсказка Anaconda PowerShell, и мы будем использовать ее для создания и активации виртуальных сред с помощью conda.

Создание виртуальной среды с помощью conda

(base) PS> conda create -n virtualconda

Примечание. Если вы используете Windows PowerShell для создания виртуальных сред с помощью conda, вы можете столкнуться с некоторыми ошибками. Поэтому попробуйте добавить свою установку Anaconda в PATH.

Активация нашей среды virtualconda

(base) PS> conda activate virtualconda 
(virtualconda) PS>

Установка пакетов

Мы использовали pip для установки внешних пакетов, но в этом случае мы должны использовать conda.

(virtualconda) PS> conda install pandas

Все необходимые пакеты будут установлены вместе с Python (той же версии, что и в вашей системе) и pandas.

Деактивация нашей среды virtualconda

После завершения работы с виртуальной средой деактивируйте ее.

(virtualconda) PS> conda deactivate 
(base) PS>

Виртуальные среды хранятся в папке envs внутри пути установки Anaconda.

Заключение

В рамках этого руководства мы создали множество виртуальных сред, используя различные пакеты и встроенные модули.

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

Мы получили полное представление о виртуальных средах, и теперь мы можем использовать их в наших проектах, не задумываясь.

На этом пока все

Продолжайте программировать✌✌

Первоначально опубликовано на https://geekpython.in.