что такое виртуальная среда python
Как создать виртуальную среду (окружение) на Python
Приложение Python часто использует пакеты и дополнительные модули, которые не входят в стандартную библиотеку. Иногда приложениям может потребоваться определенная версия библиотеки для выполнения конкретной задачи или исправления ошибки. Узнаем как создать виртуальную среду на Python.
Важность создания виртуальной среды
Предположим, мы разрабатываем два приложения, которым требуется более старая версия библиотеки, а другим приложениям требуется новая версия библиотеки в той же установке Python. Иногда это приводит к проблемам.
Другими словами, одна установка Python может не соответствовать требованиям нескольких приложений. Требования различных приложений могут конфликтовать друг с другом. Например: Если приложению A требуется версия 1.0, а другому приложению – версия 2.0, они создадут конфликт, и в результате одно приложение не сможет работать.
Чтобы разрешить это противоречивое требование, Python предлагает создать виртуальную среду. Приложение A имеет среду с версией 1.0. Приложение B имеет среду с версией 2.0, поэтому, если мы хотим обновить приложение B до версии 3.0, это не повлияет на среду приложения A.
Создание виртуальной среды
Модуль venv используется для создания и управления виртуальной средой. Он доступен в самой последней версии Python. Мы можем выбрать место для создания виртуальной среды и запустить модуль venv как сценарий пути к каталогу. Введите следующую команду в командной строке и нажмите кнопку ввода.
Приведенная выше команда создаст каталог new-env; он также создает каталог внутри вновь созданной виртуальной среды new-env, содержащий новую копию интерпретатора Python.
Примечание: мы можем написать просто python вместо python3, потому что он используется только в том случае, если мы установили различные версии Python.
Все виртуальные среды хранятся в общей папке venv. Создав виртуальную среду, мы должны активировать ее, введя следующую команду.
В Window нажмите Enter после ввода:
В UNIX или MacOs запустите:
После активации виртуальной среды изменится приглашение оболочки, чтобы указать, какую виртуальную среду мы используем.
Управление пакетами с помощью pip
Мы можем устанавливать, обновлять и удалять библиотеки в активированной виртуальной среде с помощью диспетчера пакетов под названием pip в Python.
Если мы повторно запустим предыдущую команду, она покажет, что требуемая версия уже установлена.
1. Что такое venv и зачем он мне нужен?
Что произойдет, если одному из ваших проектов понадобится пакет с версией, отличной от версии другого проекта? Что происходит, когда вы обновляете пакет для одного проекта: испортит ли это ваш код в другом проекте, который зависит от этого пакета? Как вы делитесь своим кодом с другими?
Чтобы получить представление о том, что такое venv, мы разделим его на две части: виртуальную и окружающую среду
Окружающая среда
Среда, с которой вы уже знакомы. Например, когда вы устанавливаете Python3.10, вы не просто устанавливаете движок Python, также устанавливается pip. Когда вы используете pip для установки пакета, он попадает в папку Scripts в каталоге, в который вы установили Python. Это ваша среда: Python 3.10 со всеми установленными пакетами.
Если вы запустите свою программу python main.py произойдет следующее:
Виртуальная среда
Мне нравится думать о Venv как о создании совершенно новой, несколько более легкой среды специально для этого проекта. В следующих частях мы увидим, что когда вы создаете venv для своего проекта, вы фактически устанавливаете Python, pip и папку dependencies заново для этого конкретного проекта. Этот код не находится в вашем пути Python по умолчанию (например C:\Program Files\Python39 ), но может быть установлен где угодно, например, в папке вашего проекта (например C:\myProject\weatherApp\venv ).
Совместное использование и создание окружающей среды
Когда у вас есть виртуальная среда, вы можете указать ей создать для вас список всех содержащихся в ней пакетов. Затем, когда кто-то еще захочет использовать ваш код, он может создать собственный venv и использовать этот список для одновременной установки всех пакетов с нужными версиями. Это позволяет очень легко поделиться своим кодом с другими (через git, почту или USB-накопитель).
2. Создание виртуальной среды
Создадим нашу виртуальную среду! В следующих шагах мы убедимся, что виртуальная среда может быть создана. Мы будем использовать пакет Python под названием virtualenv для создания наших файлов venv
2.1 Установите Python
2.2 Установите virtualenv
2.3 Создание нашей первой виртуальной среды
Теперь, когда у нас есть программное обеспечение для создания виртуальных сред, мы можем его создать.
3. Использование нашей виртуальной среды
Давайте начнем использовать нашу виртуальную среду. В этой части мы активируем его, установим несколько пакетов и снова деактивируем
3.1 Активация нашей виртуальной среды
Если ваша среда активирована, вы увидите (venv) перед своим путем в вашем терминале, как на изображении выше. Каждый пакет, который вы pip install будет установлен в вашем virtualenv.
3.2 Использование нашей виртуальной среды
Вызов например pip install requests сейчас установит его на ваш venv. Вы можете увидеть это, вызвав pip list в вашей активированной среде; вы увидите там запросы. С другой стороны, если вы вызовете pip list в другом терминале (где не активирован venv), вы увидите другой список установленных пакетов
3.3 Деактивация нашей виртуальной среды
Вы можете отключить Venv, просто выполнив deactivate в своем терминале.
4. Экспорт и сборка venv
Вы создали приложение, которое работает с некоторыми зависимостями. Предположим, вы установили запросы и панды для запроса данных из API, выполнили некоторую очистку в пандах и затем сохранили их в файл. Теперь вы хотите, чтобы другие использовали вашу программу, но вот проблема: им нужно установить точно такие же зависимости с правильными версиями и все такое. Дадим им список.
4.1. Перечислите свои зависимости в файле requirements.txt
Представим что у вас есть список пакетов, от которых зависит ваша программа. Pip может прочитать этот список и установить все пакеты.
4.2 Загрузка ваших зависимостей
4.3 Игнорирование виртуальных сред в git
Если вы хотите добавить свой проект в систему контроля версий, такую как Github, не рекомендуется включать всю виртуальную среду. Это занимает много места и времени для загрузки и скачивания.
4.4 Установка пакетов из проектов git с исключенным venv
4.5 Виртуальные среды, requirements.txt и docker
Docker нужен список инструкций для сборки контейнера, и файл requirements.txt идеально подходит для этого. Dockerfile может выглядеть так:
Не волнуйтесь, если у вас нет опыта работы с Docker, просто знайте, что мы можем автоматически перенести весь наш исходный код внутри контейнера, установить все пакеты (# 3), а затем запустить наше приложение.
5. Лучшие практики: предотвращение ада зависимости
Следуя этим правилам, не должно быть вопросов о типе и версии ОС, python и всех его зависимостях.
Заключение
Я надеюсь, что смогу прояснить виртуальные среды и то, как Python устанавливает зависимости и как сохранить зависимости, чтобы они запутывались между проектами. Если у вас есть предложения / пояснения, прокомментируйте, чтобы я мог улучшить эту статью. Удачного кодирования!
Использование виртуальных сред venv и virtualenv для создания окружения Python
Виртуальные среды (окружения) используются в Python 3 контроля версионности пакетов. Кроме контроля версий среды используют для использования разных интерпретаторов. Самих пакетов, которые создают виртуальные окружения много. В этой статье речь пойдет про venv, virtualenv и virtualenvwrapper.
Навигация по посту
Для чего нужно виртуальные среды?
При создании скрипта или программы вы часто используете сторонние модули (пакеты). Если в последующем потребуется перенос программы на другой компьютер, то вы можете столкнуться с двумя проблемами:
Использование виртуальных сред избавляет вас от этих проблем. В таком виртуальной среде находится свой интерпретатор, свой pip и все пакеты относятся только к нему. Так же, весь проект, можно перенести как папку на другой компьютер без ошибок.
Кроме этого вы можете запускать разные версии Python в разных виртуальных средах, что сильно упрощает работу.
Установка и создания окружения с virtualenv
Самый популярный пакет, который используется для создания виртуальных сред в Python, это virtualenv. Для его установки на Windows выполните:
Для установки на Linux системах, для Python 3, понадобится выполнить такую команду:
Если вы не будете использовать sudo, то в зависимости от версии ОС у вас появятся разные ошибки. В CentOS установка не выполнится вовсе, а в Ubuntu не будет добавлен путь в переменную окружения:
Далее, вне зависимости от того используете ли вы Linux или Windows, вы можете выполнить команду получения справки:
Я использую Python 3.6, и так я создам окружение в папке projectname/venv:
Способ выше устанавливает окружение относительно текущего пути. Если нужно установить на другом диске или каталоге, то можно использовать абсолютный путь. Так же не обязательно указывать параметр «-p» если вы используете одну версию Python. Вариант как это может быть сделано на Windows:
Само расположение виртуального окружения рекомендуется создавать в одной папке вместе разрабатываемым приложением. Такую структуру будет легче сопровождать. Я обычно придерживаюсь такой структуры:
Активация и выход из окружения
Для того что бы виртуальное окружения начало работать его нужно активировать. В разных ОС это делается по-разному.
В случаях с Linux указываем полный путь до venv/bin/activate:
Для активации в Windows, в папке venv\Scripts есть несколько файлов:
Для активации просто укажите полный путь до файла. Например:
О том что вы находитесь в виртуальном окружении свидетельствуют следующие надписи:
Вы так же можете сравнить количество установленных пакетов внутри виртуального окружения с тем, что установлено вне:
Теперь вы можете устанавливать пакеты, которые будут работать только в этой среде.
Для выхода из окружения, за исключением запуска с помощью CMD, используйте команду:
Для CMD нужно указать путь до файла «venv\Scripts\deactivate.bat».
Управление средами через virtualenvwrapper
Если вы создаете множество виртуальных сред, например для тестирования в разных версиях Python, вы можете использовать virtualenvwrapper. Этот пакет представляет собой надстройку для virtualenv для более удобной работы и устанавливается отдельно.
Благодаря этому пакету мы сможем запускать ваши окружения так:
Для Windows нужно установить следующий пакет:
Для Linux нужно так же использовать sudo:
Настройки для Linux
Следующая команда добавит скрипты в домашний каталог для удобной работы:
При выполнении предыдущей команды у меня появилась ошибка:
virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader
Она исправилась добавлением переменной в env с путем до нужного интерпретатора:
Настройки для Windows
Все виртуальные среды, которые будут созданы, по умолчанию будут располагаться по пути «C:\Users\%USERNAME%\Envs». Если вам нужно изменить расположение, то создайте переменную WORKON_HOME с нужной директорией:
Важный момент, в случае с Windows, команды virtualenvwrapper не будут выполняться Powershell. Команды работают только через CMD.
Основные команды
Далее мы можем использовать следующие команды (основные):
Так мы создадим виртуальную среду:
Так выйдем из созданной среды:
Если нужно использовать другую версию Python:
Создание виртуальных сред со встроенным пакетом Python venv
Ранее, до версии Python >= 3.6 базовая установка интерпретатора шла вместе с пакетом pyenv, но на данный момент он считается устаревшим и более не поддерживается. На его смену пришел venv. В некоторых версиях ОС (Ubuntu/Debian) может потребоваться его отдельная установка:
Проверить, то что пакет venv установлен, можно так:
Следующая команда создаст виртуальную среду:
Выбранная версия Python и стандартные библиотеки будут скопированы в указанную папку.
Активация окружения выполняется следующим образом:
Для выхода из окружения:
Создание виртуального окружения в Pycharm
В некоторых IDE, например Pycharm, консоль встроенная и по умолчанию у вас будет запускаться интерпретатор выбранный в настройках. В Pycharm вы можете создать или изменить проект привязав его к определенному интерпретатору.
Виртуальную среду можно создать при создании нового проекта. Для этого нужно зайти по следующему пути:
В новом окне выбрать название проекта, место для копирования, интерпретатор и нажать кнопку создания окружения:
Для настройки окружения для старых проектов нужно зайти в настройки:
Во вкладе «Python Interpreter» будет выбор из существующих интерпретаторов (1). Либо можно создать новый (2):
Создание списка установленных пакетов Requirements.txt
Используя виртуальные окружения можно легко создавать файл, в котором будут собраны все названия и версии пакетов для определенного проекта. Этот подход используется для удобства работы, так как одной программой мы сразу установим нужные пакеты.
Так мы получим список пакетов, установленных в виртуальном окружении, в формате читаемом pip:
Следующим способом мы экспортируем этот список в файл Requirements.txt (способ подходит для Bash/CMD/Powershell):
На другом компьютере/среде мы можем этот список быстро проверить и установить отсутствующие пакеты следующей командой:
Виртуальные Окружения в Python
В процессе работы над проектом мне потребовалось проверить, работает ли пакет Flask с установленным у меня Python. При запуске команды для установки Flask я получил предупреждение, что пакет уже установлен, поскольку у меня установлен Anaconda.
В этой статье я решил поделиться своими знаниями о том, как установить Виртуальные Окружения в Python с использованием Терминала.
Python
На данный момент в сообществе поддерживаются две версии: 2.x и 3.x. Некоторые пакеты работают с Python 3.x, однако у других нет поддержки 3.x и они работают только с 2.x. Таким образом, в некоторых случаях используется Python 2.x, а в других — Python 3.x. Начнем с установки обеих версий Python. Для этого можно использовать установщик пакетов, например Homebrew.
Python 3.X
Python 2.X
Virtual Environment
В начале работы над проектом выберите версию Python и укажите необходимое количество библиотек/пакетов. Имеет смысл установить эти пакеты вне рамок всей системы. Если вы работаете с несколькими версиями Python на одном компьютере или несколькими пакетами, которые работают только с определенными версиями Python, то можно установить несколько виртуальных окружений ( Virtual Environments ).
Каждое окружение представляет собой отдельное виртуальное пространство. Пакеты, установленные в рамках одного пространства, не пересекаются с пакетами вне его и находятся только внутри этого пространства.
Определение место установки Python
В зависимости от используемого метода, Python может быть установлен в разные расположения.
Установка Python с официального сайта
Здесь находится установленная версия. У меня версия 3.6, поэтому путь для Python выглядит следующим образом:
Установка Python с помощью Homebrew
Установка virtualenv
Создание Виртуального Окружения
Последний аргумент в команде выше определяет путь для окружения вместе с его названием. Теперь можно начать работу с окружением.
Активация окружения
Название виртуального окружения отображается в скобках, указывая на то, что мы работаем внутри окружения.
Установка пакетов и создание файла
Также создаем файл app.py в домашнем каталоге, который обладает самым базовым кодом Hello World в Flask.
При запуске кода внутри окружения получаем следующий результат.
Со стороны клиента
Со стороны сервера
Деактивация окружения
Чтобы выйти из окружения просто введите deactivate в терминале.
Поскольку окружение отключено, то используется Python, установленный в рамках системы. Поскольку в системе не установлен Flask, то при попытке запуска того же кода, произойдет ошибка.
Аналогичным образом, можно создать окружения и повторить те же действия в Python 2.
Использование Python в Sublime Text 3
Я предпочитаю работать с Sublime Text, когда не использую Jupyter notebooks. Чтобы установить Sublime Text для Python, нужно создать новую систему сборки (build system). Перейдите к:
И введите следующий код:
Замените своим именем пользователя.
Заключение
Мы рассмотрели использование virtualenv для создания Виртуальных Окружений в Python и установки пакетов внутри этих окружений.
Виртуальные среды Python
Обзор
Основная идея виртуальной среды состоит в том, чтобы иметь интерпретатор Python и его пакеты сайтов отдельно от системного. Кроме того, вы можете иметь их несколько. Это решает обе проблемы. Вы можете назначить отдельную виртуальную среду со своими собственными зависимостями для каждого проекта и забыть о конфликтах с другими проектами и системным Python.
В этом руководстве вы узнаете о концепциях виртуальных сред и о том, как их создавать и использовать, а также о различных альтернативах для особых ситуаций.
Virtualenv
После установки virtualenv вы можете приступить к созданию виртуальных сред. Давайте создадим две среды с именами «venv_1» и «venv_2».
Посмотрим, что случилось.
В подкаталоге «bin» вы найдете несколько исполняемых файлов и символических ссылок. К ним относятся сам интерпретатор Python, pip, easy_install и, самое главное, несколько сценариев активации.
Сценарий активации является ключевым. Чтобы активировать определенную виртуальную среду, вы создаете сценарий активации, как показано в: source
Virtualenv работает даже на pypy.
Вы можете переключаться напрямую из одной среды в другую, не отключая сначала:
Хорошо. Давайте посмотрим, как использовать две разные версии одного и того же пакета в двух разных виртуальных средах. Это так же просто, как активировать каждую среду и установить нужную версию. Среды являются полностью независимыми, поэтому тот факт, что в другой среде существует другая версия, не является проблемой.
Давайте установим пакет sh версии 1.0.0 в «venv_1».
Давайте переключимся на «venv_2» и установим версию 1.11.
Теперь давайте вернемся к «venv_1» и убедимся, что его версия пакета sh по-прежнему 1.0.
Virtualenvwrapper
Все, что активирует, деактивирует и переключает, может через некоторое время устареть. Если вы управляете множеством виртуальных сред, это может выйти из-под контроля. Вот где на помощь приходит virtualenvwrapper. Virtualenvwrapper позволяет просматривать, создавать, удалять и копировать виртуальные среды. Он также позволяет легко переключать среды.
Вот как можно создать новую виртуальную среду:
Это похоже на virtualenv, но вы не указываете каталог, просто имя. Ваша новая среда здесь:
Virtualenv-Burrito
Python 3 Venv
Conda
Виртуальные среды очень полезны для изоляции зависимостей между различными проектами. Но это не распространяется на нативные библиотеки. Многие расширения C зависят от конкретных версий собственных библиотек, и они не могут быть специфичными для виртуальной среды.
Conda может решить эту проблему. Это система управления пакетами, которая обрабатывает все зависимости, а не только зависимости Python. Он даже может быть использован для упаковки не-Python программного обеспечения.
Альтернативы виртуальным средам
Вы должны использовать виртуальные среды? На самом деле, нет. Если по какой-то причине вы не увлекаетесь волшебством виртуальных сред, есть и другие варианты.
Vendorize вручную
Функциональность виртуальной среды довольно проста. Если вам нужен полный контроль, вы можете просто сделать это самостоятельно и скопировать именно то подмножество инструментов и пакетов, которые вы хотите, в целевую структуру каталогов, настроить некоторые переменные среды, и все готово.
VM или Dockerized System Python
Если вы собираете свои приложения в Docker-контейнере или облачном образе, тогда будет только один проект, и вам может не понадобиться виртуальная среда. Вы можете просто построить поверх системы Python, будучи уверенным, что она не изменится.
Если все, что вас волнует, это тестирование вашего кода в различных интерпретаторах и средах, то Tox может сделать для вас всю тяжелую работу. Он по-прежнему будет использовать виртуальные среды под капотом, но вам не придется иметь с ними дело.
Лучшие практики
Для надежных систем Python со временем появилось несколько рекомендаций по упаковке и виртуальной среде.
Версии Pin в ваших файлах требований
Никогда не используйте системный Python
Используйте индекс частного пакета при создании образов
Заключение
Существует множество вариантов управления несколькими проектами Python на одном компьютере без конфликтов. Выясните, какой вариант лучше всего подходит для вас, и используйте его. Создавать виртуальные среды можно быстро и легко. Не стесняйтесь воспользоваться этим полезным инструментом. Если у вас есть особые требования, есть много решений.