Найти тему
IT это Джизнь

#3 Что такое виртуальное окружение Python?

Оглавление

Всем привет дорогие друзья!

По прошлым статьям:

Я понял, что тема программирования не изжила себя и даже меня, новичка на дзене, вы все равно читаете. Для меня это главное ! Мы живем в 21 веке, думаю, что все должны иметь информационную грамотность. Есть надежда, что я, даже такими простыми статьями помогу вам получить небольшие знания в программировании. Ну а если вы будете и дальше читать мои статьи ну и тем более рекомендовать друзьям, буду вам бесконечно благодарен.

Введение

Ну а теперь к главному вопросу ! В прошлых статьях мы подготовили подушку для того, при помощи чего и в чем мы будем писать с вами код.

В данной статье, мы разберемся с такой немаловажной темой, как виртуальное окружение ! Многие авторы/наставники в своих уроках опускают эту тему, выдают по 50 уроков читателю/зрителю и на выходе получается следующее:

  • Вы, разобрались с синтаксисом языка программирования
  • Вы знаете все про типы объектов Python
  • Вы разбираетесь, как работать со словарями и списками
  • Знаете даже, что такое динамическая типизация
  • Умеете работать с кучей вложенных библиотек
  • И много другое
Это все для примера

Вы воодушевлены, мотивированы, начинаете активно пользоваться форумами и всяческими группами. Но тут появляется перед вами следующая картина, вам говорят -"Друг, вот, мой код, на тебе ссылку на гит хаб, скачай, воспользуйся моим окружением и у тебя будет все работать". Вы сразу же в ступоре, начинаете гуглить и понимаете, что все проекты ведутся при помощи виртуального окружения !

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

План

  • Вы узнаете, что такое виртуальное окружение?
  • Проведем, для примера, несколько экспериментов в работе с ним в редакторе кода PyСharm.

Что такое виртуальное окружение?

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

Есть несколько проблем, из-за которой новички в программировании игнорируют использование виртуального окружения. Первая – это трудность в понимании уровня абстракции, которая позволяет вам изолировать глобальные пакеты в определенном месте, с определенными версиями библиотек. Вторая – это использование Bash или командной строки Windows для активации, деактивации или создания окружения. Лично, я хочу, чтобы вы с самого начала учились использовать это замечательное решение и применяли эти знания на практике. Именно поэтому, мои уроки построены на использовании PyCharm, так как в нем, все интуитивно понятно и просто. Можно забыть про командную строку и наслаждаться беспрепятственным программированием.

Разновидности инструментов для работы с виртуальным окружением Python.

  • Venv Наиболее популярный инструмент. Рекомендуется к использованию на официальном сайте Python версии 3.5 и выше.
  • Virtualenv Очень часто упоминается в официальных документациях известных Фреймворках, например, Flask. В работе, практически не отличается от venv, но требует установки при помощи системы управления пакетами pip. Поддерживается по умолчанию в PyCharm. В дальнейших статьях будет продемонстрирована работа именно с этим инструментом.
  • Virtualenvwrapper - утилита, которая ставится на Virtualenv . Позволяет облегчить управление виртуальными окружениями, а именно – переключение между проектами, удаление, создание, т.е. если разработка приложений осуществляется в редакторах кода без систем управления окружениями, то это превращается в ад… Требуется вспомнить, где располагается окружение, найти его и активировать в командном режиме. Но нам это не грозит, PyCharm умеет работать с окружениями.
  • Pipenv Думаю, по популярности схож с venv, его активно рекомендуют на просторах python.org , позволяет использовать pipfile.lock (это новый стандарт указания зависимостей библиотек проекта, замена requirements.txt). Позже вы узнаете, что это такое. Pipenv мы использовать не будем, но если интересно, можете написать в кометах и я напишу отдельную статью по этому инструменту. На мой взгляд, для начинающих будет сложно сходу разобраться в его работе.

Есть 2 варианта работы с виртуальным окружением. Первый – через командную строку. Который мы использовать практически не будем, только лишь в целях ознакомления. Второй, при помощи нашей среды разработки PyCharm. Который мы будем использовать активно.

Первый способ требует понимания всего технологического процесса, и как я рассказал ранее – нужно помнить где находится окружение - нужно ручками зайти, активировать/деактивировать или создать его. Лучше углубимся в программирование, чем будем тратить силы на то, что уже давно визуализировано и автоматизировано.

Изолированное виртуальное окружение

Запускаем PyCharm. После непродолжительной загрузки перед нами открывается окно приветствия. Нажимаем на кнопку создания нового проекта.

Нажимаем на кнопку "Create New Project".
Нажимаем на кнопку "Create New Project".

Переходим в окно конфигурации проекта.

Ниже описание всех полей
Ниже описание всех полей

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

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

Поле Base Interpreter отвечает за используемый интерпретатор Python, а точнее путь к нему. Мы используем Pythonверсии 3.8, но может быть и такое, когда проект требуется создать, например, на Python 3.5, в таком случае, на ПК может быть установлено несколько интерпретаторов – 3.5 версии и 3.8(например). В таком случае, указываем путь к нужному нам Python.

Чекбокс inherit global site-packages означает, что пакеты, установленные вне вашей виртуальной среды, будут импортированы в проект автоматически. Дальше, я покажу вам наглядно как это работает.

Чекбокс make available to all projects переводится как «сделать доступным для всех проектов». То есть, если вы хотите использовать эту среду и для других проектов, то этот чекбокс лучше включить.

В первом примере оба чек бокса пусть будут отключены, я продемонстрирую как это работает.

Нажимаем кнопку «создать». Ожидаем загрузки необходимых компонентов, а также прохождения процедуры индексации.

После создания проекта, видим иерархический список файлов и директорий проекта
После создания проекта, видим иерархический список файлов и директорий проекта

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

Создадим python файл в корне проекта, назовем его test.

ПКМ нажимаем на корневую директорию проекта и создаем новый *.py файл
ПКМ нажимаем на корневую директорию проекта и создаем новый *.py файл

Открываем терминал.

Клик на кнопку Terminal
Клик на кнопку Terminal

Этот тот самый терминал windows, только из-под IDE. Он нам сейчас нужен, чтобы убедиться, что окружение создано и активировано. Видим префикс «test_venv» перед строкой, он имеет такое же название, как и указанный ранее путь к директории виртуального окружения.

Давайте попробуем ввести команду «Pip list» для отображения установленных библиотек.

Вводим команду в терминал "pip list"
Вводим команду в терминал "pip list"

При создании "голого" окружения всегда предустановлено 2 библиотеки – setaptools и пакетный менеджер pip. Это и есть наше виртуальное окружение, изолированное от внешнего мира.

Теперь давайте введем такую же команду, но вне нашего окружения, а в командной строке Windows. Сочетанием клавиш WIN+R, вводим cmd и открывается командная строка Windows.

-8

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

Не поняли, не переживайте, это работает так. Есть глобальное расположение пакетов(C:\Users\User\AppData\Local\Programs\Python\Python39) - GLOBAL, это то место, куда мы устанавливали интерпретатор Python в первой статье. Когда мы создали новое окружение test_venv и активировали его, то расположение пакетов по умолчанию для этого проекта изменилось на вот этот путь (C:\Users\YouTube\PycharmProjects\test_venv). Если мы деактивируем его, и будем использовать наш проект без виртуального окружения, то все библиотеки, импортированные в проекте, будут браться по умолчанию - из глобала. Деактивированное окружение - это когда нет префикса.

Для примера, установлю библиотеку requests в наше виртуальное окружение test_venv. Вводим снова pip list для отображения установленных модулей.

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

Как видим, у нас появилась requests, но появились и другие библиотеки. Откуда они? Тут все просто, пакетный менеджер pip обращается в официальное хранилище программного обеспечения pypi.org, он находит библиотеку requests, но для работы данной библиотеки требуются еще установка зависимых библиотек. Именно поэтому появились и другие библиотеки. Не переживайте, вся установка происходит в автоматическом режиме. Раньше, в более старых версиях Python, когда не было pip и pypi.org программисты устанавливали все в ручном режиме, это была мука, уж поверьте.

Теперь введем эту же команду вне окружения, видим только 2 библиотеки.

Вне нашего окружения test_venv
Вне нашего окружения test_venv

Теперь поняли, как это работает? Вот вам и вся изоляция. Данная конфигурация при создании проекта помогла нам изолировать проект от глобального расположения пакетов. Теперь, при передачи кода в третьи руки, люди смогут активировать наше окружение и пользоваться предустановленными библиотеками(но только теми, которые нужны проекту для работы).

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

Не изолированное виртуальное окружение.

Создадим теперь проект с активированным чек боксом inherit global site-packages.

-11

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

После создания проекта проверим уже известными командами, какие же пакеты нам доступны.

Теперь, пакеты, такие же как и в глобале
Теперь, пакеты, такие же как и в глобале

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

Подведем итоги

Надеюсь, что удалось понятным языком довести до вас, как же работает виртуальное окружение и для чего оно нужно. Советую вам, при каждом следующем уроке создавать всегда новое окружение, так вы выточите в себе привычку работать правильно! А самое главное, потом не будете путаться в своих же библиотеках и их версиях.

Спасибо за внимание 😄