В программировании на Python нам нужен интерпретатор для компиляции нашей программы на Python. Мы знаем, что у Python есть несколько версий, обычно python2.x и ptyhon3.x. Для создания приложения на Python мы часто используем сторонние пакеты и модули. Каждый пакет и модуль может иметь несколько версий, в которых одна версия может поддерживать python2.x, тогда как другая версия может поддерживать python3.x.

Это означает, что одна установка Python может не соответствовать требованиям каждого приложения. Если приложению A требуется версия 1.0 определенного модуля, а приложению B требуется версия 2.0, то требования конфликтуют, и установка версии 1.0 или 2.0 приведет к невозможности запуска одного приложения.

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

Виртуальная среда

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

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

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

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

Запустите программу ниже:

#python3.x
import site
import sys 
print(sys.prefix)
print(site.getsitepackages())

Вы получите вывод, как показано ниже:

/home/imshakil/PythonVenv
['/home/imshakil/PythonVenv/lib/python3.6/site-packages', '/home/imshakil/PythonVenv/local/lib/python3.6/dist-packages', '/home/imshakil/PythonVenv/lib/python3/dist-packages', '/home/imshakil/PythonVenv/lib/python3.6/dist-packages', '/usr/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
Process finished with exit code 0

Здесь 1-я строка — это каталог виртуальной среды, остальные — куда устанавливаются пакеты.

По умолчанию каждый проект в вашей системе будет использовать эти каталоги для хранения и извлечения сайтовых пакетов (сторонних библиотек). Это не проблема для системных пакетов (стандартная библиотека Python), но это должно быть связано со сценарием в приведенном выше примере, который я обсуждал ранее в этой статье. Это настоящая проблема для Python, поскольку он не может различать версии в каталоге site-packages. Таким образом, и v1.0.0, и v2.0.0 будут находиться в одном и том же каталоге с одним и тем же именем.

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

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

Существует несколько вариантов установки виртуальной среды в вашей системе. Давайте начнем с самого простого «venv».

Продавец

Venv обычно устанавливает последнюю доступную версию Python. Если в вашей системе установлено несколько версий Python, вы можете использовать конкретную версию, т.е. python3 или что хотите. чтобы проверить доступную версию Python в вашей системе, выполните следующие команды в Linux:

which python
which python3.x # 

Перейдите в каталог, в котором вы хотите создать виртуальную среду, а затем выполните следующую команду:

sudo apt install virtualenv
sudo apt-get install python3-venv
python3 -m venv TestVenv

Это создаст каталог виртуальной среды как «TestVenv» с Python3.

чтобы активировать это:

/TestVenv/bin/activate

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

Это все для базового понимания виртуальной среды. Я все еще учусь этому. Я напишу об этом позже. Спасибо.

Ссылка:

[1]. https://docs.python.org/3/tutorial/venv.html
[2]. https://realpython.com/python-virtual-environments-a-primer/
[3]. https://www.geeksforgeeks.org/python-virtual-environment/