Всем привет дорогие друзья!
По прошлым статьям:
Я понял, что тема программирования не изжила себя и даже меня, новичка на дзене, вы все равно читаете. Для меня это главное ! Мы живем в 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. После непродолжительной загрузки перед нами открывается окно приветствия. Нажимаем на кнопку создания нового проекта.
Переходим в окно конфигурации проекта.
В поле 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.
Открываем терминал.
Этот тот самый терминал windows, только из-под IDE. Он нам сейчас нужен, чтобы убедиться, что окружение создано и активировано. Видим префикс «test_venv» перед строкой, он имеет такое же название, как и указанный ранее путь к директории виртуального окружения.
Давайте попробуем ввести команду «Pip list» для отображения установленных библиотек.
При создании "голого" окружения всегда предустановлено 2 библиотеки – setaptools и пакетный менеджер pip. Это и есть наше виртуальное окружение, изолированное от внешнего мира.
Теперь давайте введем такую же команду, но вне нашего окружения, а в командной строке Windows. Сочетанием клавиш WIN+R, вводим cmd и открывается командная строка Windows.
Как видим, вне окружения у нас установлены все те же библиотеки, НО версии отличаются, потому, что расположены эти библиотеки в разных местах, для наглядности, я обновил две эти библиотеки в глобале, т.е. вне окружения, будем дальше называть это так.
Не поняли, не переживайте, это работает так. Есть глобальное расположение пакетов(C:\Users\User\AppData\Local\Programs\Python\Python39) - GLOBAL, это то место, куда мы устанавливали интерпретатор Python в первой статье. Когда мы создали новое окружение test_venv и активировали его, то расположение пакетов по умолчанию для этого проекта изменилось на вот этот путь (C:\Users\YouTube\PycharmProjects\test_venv). Если мы деактивируем его, и будем использовать наш проект без виртуального окружения, то все библиотеки, импортированные в проекте, будут браться по умолчанию - из глобала. Деактивированное окружение - это когда нет префикса.
Для примера, установлю библиотеку requests в наше виртуальное окружение test_venv. Вводим снова pip list для отображения установленных модулей.
Как видим, у нас появилась requests, но появились и другие библиотеки. Откуда они? Тут все просто, пакетный менеджер pip обращается в официальное хранилище программного обеспечения pypi.org, он находит библиотеку requests, но для работы данной библиотеки требуются еще установка зависимых библиотек. Именно поэтому появились и другие библиотеки. Не переживайте, вся установка происходит в автоматическом режиме. Раньше, в более старых версиях Python, когда не было pip и pypi.org программисты устанавливали все в ручном режиме, это была мука, уж поверьте.
Теперь введем эту же команду вне окружения, видим только 2 библиотеки.
Теперь поняли, как это работает? Вот вам и вся изоляция. Данная конфигурация при создании проекта помогла нам изолировать проект от глобального расположения пакетов. Теперь, при передачи кода в третьи руки, люди смогут активировать наше окружение и пользоваться предустановленными библиотеками(но только теми, которые нужны проекту для работы).
В большинстве случаев Python проекты строго привязаны к версиям библиотек. Предоставленное решение в этой статье помогает упростить жизнь программистов. Не я это придумал, но большинство программистов работают именно так.
Не изолированное виртуальное окружение.
Создадим теперь проект с активированным чек боксом inherit global site-packages.
Все поля заполняем как в предыдущий раз. Это нужно, что бы вы поняли, как это работает, если среда не изолирована, а наследует глобальный путь до пакетов Python.
После создания проекта проверим уже известными командами, какие же пакеты нам доступны.
Видим, что пакеты абсолютно идентичные, как и в глобале. Это и означает, что пакеты, установленные вне нашего окружения доступны для работы. Делаем вывод – что при такой конфигурации среда не жестко изолирована, а наследует их из установленного локально интерпретатора Python.
Подведем итоги
Надеюсь, что удалось понятным языком довести до вас, как же работает виртуальное окружение и для чего оно нужно. Советую вам, при каждом следующем уроке создавать всегда новое окружение, так вы выточите в себе привычку работать правильно! А самое главное, потом не будете путаться в своих же библиотеках и их версиях.
Спасибо за внимание 😄