#статьи
-
0
Учимся изолировать код от внешнего мира и предотвращать хаос в зависимостях.
Иллюстрация: Оля Ежак для Skillbox Media
Пишет про digital и машинное обучение для корпоративных блогов. Топ-автор в категории «Искусственный интеллект» на Medium. Kaggle-эксперт.
Виртуальное окружение (venv, virtual environment) в Python — это изолированное рабочее пространство для проектов. Представьте, что ваш компьютер — дом со множеством комнат. Виртуальное окружение в этом случае — отдельная комната с инструментами, мебелью и всем необходимым для работы над конкретным проектом. Вы можете создать сколько угодно таких комнат, и каждая будет существовать независимо от других. Благодаря этому вы сможете переключаться между проектами, не смешивая их содержимое.
Мы упомянули понятие «виртуальное окружение» вместе с терминами virtual environment и venv, которые часто используются как синонимы. Однако между ними есть разница: virtual environment — это общий термин, обозначающий концепцию изолированной среды в Python, а venv — конкретный модуль в стандартной библиотеке Python для создания виртуальных окружений. В статье мы создадим виртуальное окружение с помощью venv, активируем его и потренируемся им пользоваться.
Содержание
- Подготовка к работе
- Создание виртуального окружения
- Активация виртуального окружения
- Выход из виртуального окружения
- Подборка альтернативных виртуальных окружений
Начать работу с виртуальным окружением несложно. Однако прежде вам нужно установить Python и редактор кода, а также освоить базовые навыки работы с командной строкой. Если всё это у вас уже есть, можете сразу переходить к следующему разделу.
«Как запустить Python офлайн и онлайн: руководство для новичка» — статья, в которой мы рассматриваем системные требования, помогаем с выбором версии языка и предлагаем пошаговые инструкции по установке Python на Windows, Linux и macOS.
После установки Python откройте терминал и введите следующую команду. Она должна вывести номер установленной версии:
python --version
Если вы установили Python по нашему руководству, то уже познакомились с основными командами терминала. В дальнейшем мы будем использовать такие же простые команды, поэтому специально изучать работу с терминалом не обязательно. Однако, если хотите углубиться в тему, рекомендуем ознакомиться со статьёй «Основные команды и горячие клавиши терминала Linux (а также Unix, macOS и FreeBSD)».
«Visual Studio Code: установка, настройка, русификация и список горячих клавиш» — подробное руководство по настройке бесплатного редактора VS Code. Рекомендуем также установить расширение Python для VS Code, которое включает функции отладки, автодополнения кода, форматирования и интеграции с виртуальными окружениями.
Вот несколько задач, для которых может пригодиться виртуальное окружение.
- Разработка нескольких проектов с разными зависимостями. Например, один проект может требовать Python 3.7 и Django 2.2, а другой — Python 3.9 и Django 3.2. Виртуальные окружения позволяют легко переключаться между обоими проектами на одном компьютере, избегая конфликтов между версиями.
- Изоляция проекта от системных библиотек. Предположим, на вашем компьютере установлена версия NumPy 1.18, а проекту требуется версия 1.20. Виртуальное окружение позволяет установить и использовать нужную версию библиотеки для конкретного проекта, не затрагивая системные установки.
- Обучение и экспериментирование. Виртуальные окружения служат безопасной площадкой для изучения новых библиотек и версий Python. Они позволяют тестировать инструменты без риска нарушить работу существующих проектов.
- Упрощение развёртывания проектов на разных машинах. Виртуальное окружение облегчает передачу проекта другим разработчикам или клиентам. Достаточно отправить коллеге файл со списком всех зависимостей проекта и их версий, и он сможет воссоздать копию вашей рабочей среды на своём компьютере.
Для создания виртуального окружения в Python откройте терминал, перейдите в директорию проекта и выполните команду:
python -m venv my_project_environment
В этой команде my_project_environment — это название виртуального окружения. Хотя оно может быть любым, старайтесь выбирать имя, которое отражает суть проекта. Лучше использовать длинное и понятное название, чем короткую аббревиатуру.
Перейдём к практике и разберём сценарий, когда на одном компьютере нам нужно создавать два проекта: первый — на Django 2.2, а второй — на Django 3.2.
Давайте последовательно выполним две команды, чтобы создать виртуальные окружения для каждого из наших проектов:
# Создание виртуального окружения для проекта с Django 2.2 python -m venv django_2_2_env # Создание виртуального окружения для проекта с Django 3.2 python -m venv django_3_2_env
После выполнения команд в терминале не произойдёт видимых изменений. Однако в фоновом режиме Python создаст изолированную среду, скопирует нужные файлы и настроит пути для работы с пакетами.
Скриншот: Командная строка Windows / Skillbox Media
После создания виртуального окружения останьтесь в директории проекта и выполните команду активации:
- для Windows: myenv\\Scripts\\activate;
- для macOS и Linux: source myenv/bin/activate.
После активации все команды языка Python и менеджера пакетов PIP будут работать с версиями и пакетами, установленными в этом окружении.
Мы создали два виртуальных окружения, но активировать можно только одно за раз. Давайте активируем окружение django_2_2_env в Windows:
django_2_2_env\Scripts\activate
Скриншот: Командная строка Windows / Skillbox Media
Теперь перейдём в VS Code и убедимся, что виртуальное окружение активировано и мы можем начать работу над нашим проектом:
- введите в терминале команду code . для запуска VS Code;
- в VS Code откройте новый терминал через меню View → Terminal;
- убедитесь, что в терминале VS Code отображается название вашего виртуального окружения. В нашем случае это django_2_2_env.
Если всё прошло успешно ?, вы можете сразу приступить к работе. Если нет — изучите сообщения в терминале и определите, что именно нужно исправить. Например, мы столкнулись с проблемой активации виртуального окружения через команду терминала из-за политики выполнения PowerShell. Это распространённая ситуация в Windows.
Скриншот: Visual Studio Code / Skillbox Media
Если столкнётесь с такой же проблемой, откройте PowerShell от имени администратора и выполните следующую команду:
Set-ExecutionPolicy RemoteSigned
После этого появится запрос на подтверждение изменения политики выполнения скриптов. Введите Y, нажмите Enter и попробуйте снова активировать виртуальное окружение.
Если предыдущий метод не сработал, попробуйте альтернативный способ активации виртуального окружения. Эта команда напрямую запускает скрипт активации, обходя некоторые ограничения безопасности:
path\to\venv\Scripts\activate.bat
path\to\venv\ — это путь к вашему виртуальному окружению. В нашем примере команда будет выглядеть так:
django_2_2_env\Scripts\activate.bat
В процессе работы вы неизбежно столкнётесь со множеством подобных ошибок, которые невозможно предвидеть и предотвратить. Поэтому вам, как разработчику, необходимо научиться копировать текст ошибок и самостоятельно искать решения в интернете.
Мы устранили ошибку, активировали виртуальное окружение и теперь можем приступить к работе над проектом. Давайте установим Django 2.2:
pip install django==2.2
Убедимся, что нужная версия Django установлена:
python -m django --version
Также проверим местоположение нашего виртуального окружения:
pip -V
Скриншот: Visual Studio Code / Skillbox Media
После активации виртуального окружения Python создаёт структуру файлов и папок, обеспечивающую изоляцию проекта и управление зависимостями. Эта структура включает в себя папки Include, Lib и Scripts, а также файл pyvenv.cfg:
Скриншот: Visual Studio Code / Skillbox Media
Папка Include содержит специальные файлы, необходимые для компиляции некоторых Python-пакетов. Например, при установке библиотеки NumPy, которая включает части кода на языке C, система использует файлы из этой папки для компиляции и установки пакета в вашем виртуальном окружении. Изначально эта папка пуста, а необходимые файлы создаются по мере установки определённых пакетов.
Папка Lib содержит все установленные библиотеки и пакеты для данного окружения. Например, если вы установили в виртуальное окружение Django 3.2, в папке Lib/site-packages будет храниться директория django со всеми файлами этого фреймворка.
Папка Scripts содержит исполняемые файлы и скрипты для работы с окружением. Вот её основное содержимое:
- activate и activate.bat — скрипты для активации виртуального окружения;
- deactivate.bat — скрипт для деактивации окружения;
- python.exe — исполняемый файл Python для данного окружения;
- pip.exe — утилита для установки пакетов и управления ими.
Pyvenv.cfg — это конфигурационный файл, обеспечивающий корректную работу виртуального окружения. Он указывает системе, какую версию Python и какие настройки применить при активации окружения.
Допустим, мы хотим выйти из виртуального окружения в основное пространство системы. Для этого достаточно выполнить простую команду:
deactivate
После этого введите pip -V и убедитесь, что вы больше не находитесь в виртуальном окружении. Если деактивация не произошла, перезапустите VS Code и повторите процесс. Вот несколько дополнительных советов:
- python -m venv —help — используйте эту команду для просмотра всех доступных опций при создании виртуального окружения и работе с ним.
- Virtualenvwrapper — попробуйте этот инструмент, если вам часто приходится создавать несколько виртуальных окружений и переключаться между ними. Он удобнее стандартного venv, поскольку предоставляет простые команды для управления виртуальными окружениями и хранит все окружения в одном месте.
- pip install —upgrade [имя_пакета] — применяйте эту команду примерно раз в месяц или при выходе важных обновлений безопасности. Это поможет поддерживать актуальность пакетов в вашем виртуальном окружении.
Теперь активируем второе виртуальное окружение django_3_2_env:
django_3_2_env\Scripts\activate.bat
Предположим, во время активации мы столкнулись с какой-то новой ошибкой и не смогли её исправить. В таком случае нам нужно удалить это окружение, чтобы создать его заново:
- в Windows: rmdir /s /q имя_окружения;
- в macOS и Linux: rm -rf имя_окружения.
имя_окружения — название окружения, которое вы деактивировали и хотите удалить.
Теперь применим новую команду и попробуем удалить второе окружение:
rmdir /s django_3_2_env
Эта команда должна полностью удалить директорию виртуального окружения, однако иногда она не срабатывает и выдаёт такую ошибку:
+ CategoryInfo : InvalidArgument: (:) [Remove-Item], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
Эта ошибка часто возникает из-за особенностей работы PowerShell в Windows, связанных с ограничениями доступа или блокировкой файлов системой. Для её устранения воспользуйтесь альтернативной командой:
Remove-Item -Recurse -Force django_3_2_env
Если альтернативная команда не сработала, закройте все программы и процессы, которые могут использовать файлы в этой директории. Затем перезапустите редактор кода и попробуйте снова удалить окружение. Такова она, жизнь программиста ¯\(ツ)/¯
Скриншот: Visual Studio Code / Skillbox Media
Помимо venv, есть и другие инструменты для создания изолированных сред в Python, которые лучше подходят для определённых задач. Рассмотрим некоторые из них:
- Virtualenv поддерживает старые версии Python и предоставляет больше функций, чем venv. Например, Virtualenv позволяет указать конкретную директорию для установки пакетов, в то время как venv использует фиксированный подкаталог. Такая гибкость делает Virtualenv удобным для сложных проектов.
- Conda управляет пакетами Python и системными зависимостями, что делает его подходящим для сложных проектов в data science и машинном обучении. Например, одной командой Conda может создать окружение с Python 3.8, TensorFlow 2.4.0 и OpenCV. В сравнении с Conda у venv более ограниченная функциональность: он создаёт окружения только для Python и его пакетов, не управляет системными зависимостями и работает с уже установленной версией Python.
- Pipenv объединяет управление зависимостями и виртуальными окружениями в одном инструменте — воспроизводимой среде разработки. У venv более узкая функциональность: он не управляет зависимостями автоматически и не предоставляет инструментов для разделения сред разработки и продакшена.
- Poetry управляет зависимостями, сборкой и публикацией пакетов в Python. Его часто применяют в проектах, требующих точного контроля версий. Poetry позволяет указывать конкретные версии пакетов, чтобы обеспечить единую среду разработки для всех участников проекта и избежать ошибок из-за разных версий проекта.
Выбор инструмента зависит от специфики проекта, личных предпочтений и требований команды. Например, специалист по data science может предпочесть Conda вместо venv для работы с большими объёмами данных и выполнения сложных вычислений.
Курс с трудоустройством: «Профессия Python-разработчик»
Узнать о курсе
Введение
Привет! Меня зовут Женя и я работаю аналитиком данных. В этой статье я бы хотел рассказать начинающим аналитикам о том, как правильно настроить окружение для работы с Python. Когда я только начинал заниматься анализом данных, концепция питоновского виртуального окружения вводила меня в ступор, и здесь я постараюсь показать, что в ней нет ничего сложного.
Для этого мы:
-
Установим Python
-
Создадим и активируем виртуальное окружение при помощи базовых инструментов
pip
иvenv
-
В качестве примера установим библиотеки
notebook
иpandas
-
Посмотрим на базовое управление зависимостями через
requirements.txt
-
Запустим Jupyter Notebook и напишем в нём «Hello, world!»
В конце я покажу, как сделать то же самое при помощи более современного инструмента uv
, а пока приступим.
Установка Python
Если вы работаете на каком-либо дистрибутиве Linux, Python 3, как правило, предустановлен в системе. Это можно проверить, выполнив в терминале команду python3 --version
(Debian, Ubuntu) или просто python --version
(Arch, Fedora). Я буду показывать всё на примере Ubuntu 24.04, установленной в WSL (Windows Subsystem for Linux):
На macOS вы можете установить Python с помощью пакетного менеджера Homebrew либо официального установщика. Будьте внимательны: на macOS предустановлен старый Python 2, и если вы выполните просто python --version
, то увидите именно его. Установите Python 3 и выполняйте все команды через python3 <arguments>
.
На Windows я бы советовал использовать WSL, но можно точно так же воспользоваться официальным установщиком (не забудьте на первом экране поставить галочку напротив Add Python to PATH, чтобы иметь доступ к Питону из терминала) либо при помощи одного из виндовых пакетных менеджеров (я использую и рекомендую Scoop).
Создание виртуального окружения
В этой части мы настроим окружение для удобной работы с Python. Настройка окружения для Python — до сих пор не самый очевидный и тривиальный процесс. Думаю, что вскоре эти проблемы решаться с помощью uv
(менеджера версий Питона, пакетов и окружений), но пока остановимся на самом распространённом и простом способе: связке venv
+ pip
.
Создадим директорию, в которой мы собираемся работать. У меня это будет директория python_intro
, которую я создам в директории Code
, лежащей в корне Ubuntu:
# ~ - это псевдоним корневой директории,
# а команда cd означает 'change directory'
# и ожидает в качестве своего аргумента
# путь к директории, куда мы хотим переместиться
cd ~/Code
# команда mkdir создаёт новую директорию
mkdir python_intro
cd python_intro
Старайтесь называть файлы, директории, столбцы таблиц и т. д., не используя пробелов. Так с ними будет намного удобнее работать. Например, если бы наша директория называлась
python intro
, то в командеcd
её пришлось бы взять в кавычки (cd 'python intro'
), либо заэкранировать пробел. Иначеcd
решила бы, что ей пытаются передать через пробел два аргумента, а ожидает она всего один.
Итак, мы находимся в директории python_intro
. Здесь мы должны создать виртуальное окружение для работы с Питоном и корректной установки пакетов, в т. ч. notebook
и pandas
.
Виртуальное окружение — это специальная изолированная среда, которая позволяет нам работать над своими проектами, не влияя на другие проекты или системные настройки. Например, один ваш проект требует одну версию пандаса, с которой вы в команде договорились работать, а в другом проекте вы хотите попробовать самую последнюю нестабильную версию и поэкспериментировать с ней. Перенесите ту же мысль на версии любых других библиотек или самого Python.
Если устанавливать pandas
в системе, т. е. глобально, у вас так не получится, придётся выбирать. А если устанавливать pandas не глобально, а в виртуальное окружение конкретного проекта, выбирать не придётся: в каждое окружение установится своя версия.
Более того, например, Ubuntu и любые основанные на нём дистрибутивы на сегодняшний день вообще не позволяют устанавливать питоновские библиотеки глобально из-за возможных конфликтов версий и проблем с безопасностью. Они потребуют у вас либо создать виртуальное окружение, либо установить какую-то библиотеку из официального репозитория apt (если она там, конечно, есть).
Для того чтобы создать виртуальное окружение, используем следующую инструкцию:
# python3 - обращение к интерпретатору Питона
# -m - флаг, который указывает, что следующий аргумент
# является названием питоновского модуля
# (а не, например, файла)
# .venv - название директории, в которую будут помещены
# файлы виртуального окружения
python3 -m venv .venv
Ubuntu требует указания мажорной версии:
python3
. Где-то достаточно написать толькоpython
(Fedora, Arch), на Windows можно написать и простоpy
, хотя я предпочитаю писать так, как будет работать почти везде.
При исполнении этой команды на Linux вы можете столкнуться с проблемой, но сама система подскажет, как её решить:
Сам пакет может называться по-другому (python-venv
, например), но после его установки команда отработает успешно:
После этого мы можем увидеть, что в текущей директории была создана поддиректория .venv
:
# для Линуксов и Маков
ls -la
# для Windows
dir
В общем, если прочитать нашу команду естественным языком, получится что-то вроде «python3
, возьми модуль (-m
), который называется venv
сгенерируй всё необходимое для виртуального окружения и сложи это в директорию .venv
«. Заметьте, что директория .venv
может называться как угодно. Мы можем сказать, например:
python3 -m venv my_personal_venv
И это тоже сработает. Но лучше следовать конвенции и называть эту директорию .venv
или venv
, чтобы сразу было понятно, что в ней лежит.
Активация виртуального окружения
Создать виртуальное окружение мало — для полноценной работы его нужно активировать.
Давайте спросим у нашей оболочки командной строки, какой Python сейчас используется:
# Linux / macOS
which python3
# Windows
Get-Command python
Мы увидим что-то вроде /usr/bin/python3
(или путь к исполнимому файлу Питона на Windows, например). Это значит, что сейчас у нас используется Питон, установленный глобально в системе (т. е. мы пока не находимся в виртуальном окружении). Чтобы активировать виртуальное окружение, нам нужно сообщить оболочке командной строки, что мы этого хотим. Файлы, с помощью которых виртуальное окружение активируется, находятся по пути .venv/bin/
на Unix’ах и .venv/Scripts
на Windows. Сделайте ls .venv/bin/
или dir .venv/Scripts/
— и вы увидите файлы, в названиях которых есть слово activate.
Чтобы активировать виртуальное окружение, на Unix’ах выполните:
source .venv/bin/activate
А на Windows:
.\.venv\Scripts\Activate.ps1
Пользователи Windows здесь скорее всего получат ошибку. Дело в том, что по умолчанию PowerShell (оболочка командной строки в Windows) запрещает исполнять скрипты. Нам нужно изменить политику PowerShell в отношении скриптов для текущего пользователя (если вы устанавливали Scoop, то уже выполняли эту команду):
# эта команда разрешает для текущего пользователя
# исполнять как локально созданные,
# так и загруженные из интернета, но подписанные скрипты
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# дальше повторите
.\.venv\Scripts\Activate.ps1
В зависимости от вашей оболочки командной строки вы можете увидеть разные вещи, но в общем случае перед приглашением командной строки появится (.venv)
:
Поздравляю, мы в виртуальном окружении!
Убедится в этом можно, проверив, где сейчас находится исполнимый файл нашего Питона:
which python3
Здесь, в виртуальном окружении, мы, вызывая Питон, вызываем не тот интерпретатор, который установлен глобально в системе, а тот, который сейчас лежит в директории .venv
(версии у них одинаковые, поскольку виртуальное окружение создавалось вызовом системного Питона), проверьте это сами.
Установка библиотек
Теперь нам нужно установить библиотеки, которыми мы собираемся пользоваться. Посмотрим, как это сделать, на примере pandas
и notebook
. Для установки библиотек используется стандартный питоновский менеджер пакетов pip
. Чтобы установить библиотеки с его помощью, нужно использовать команду install
, а дальше перечислить названия библиотек, разделяя их пробелами:
pip install pandas notebook
(На Linux вы можете столкнуться либо не столкнуться с той же проблемой, что и с venv
. В любом случае, вы уже догадываетесь, что пакет с названием python-pip
или python3-pip
доступен в репозиториях вашего дистрибутива.)
В результате выполнения этой команды будут отправлены запросы к pypi.org (по умолчанию) либо к какому-либо еще репозиторию (в вашей компании может быть свой собственный) и на ваш компьютер, в директорию .venv
, скачаются файлы библиотек pandas и notebook.
Сейчас, когда библиотеки установлены, вы можете выполнить pip list
и поразиться, какое количество дополнительных пакетов притащили за собой наши pandas
и notebook
(тащил их, в основном, последний).
Уделите время тому, чтобы поискать разные библиотеки, которые вам точно пригодятся, на pypi.org. Посмотрите, какие у них актуальные версии, перейдите на официальные гитхабовские репозитории. Это полезно для понимания общего контекста. Сделайте это по крайней мере для
numpy
,pandas
,matplotlib
,seaborn
иscikit-learn
.
Управление зависимостями
У вас мог возникнуть вопрос, как делиться таким проектом. Например, откуда человек, которому вы скинете проект, узнает, какие библиотеки нужно установить, чтобы с ним работать? Не будете же вы скидывать ему вашу .venv
! Надеюсь…
Ваш коллега, конечно, может догадаться о том, что следует установить, из вашего кода, но лучше зафиксировать зависимости в отдельном файле. Самый базовый подход в данном случае — это файлик requirements.txt
, где зависимости перечислены в определённом формате.
Чтобы создать такой файлик, нужно выполнить:
pip freeze > requirements.txt
После этого зависимости зафиксируются в файле с таким названием (это тоже конвенция). Откройте его в вашем любимом редакторе или сделайте cat requirements.txt
(Unix) / Get-Content requirements.txt
(Windows) в терминале — и вы увидете там все зависимости своего проекта. Человек, который будет пользоваться вашим проектом (или вы на другом ноутбуке) должен будет просто выполнить в своём виртуальном окружении pip install -r requirements.txt
— и все нужные зависимости будут установлены.
Запускаем Jupyter Notebook и выдыхаем
Осталось только запустить Jupyter Notebook. Юпитер-ноутбуки — это специальные интерактивные среды выполнения для разных языков, в т. ч. для Python. Их очень удобно использовать для анализа данных, поскольку такие ноутбуки состоят из ячеек, которые можно выполнять по отдельности и сразу видеть результат выполнения.
Давайте пока просто запустим юпитер-ноутбук и посмотрим на него:
jupyter-notebook
# на Windows можете написать jupyter-notebook.exe,
# но это особенно ни на что не повлияет,
# если у вас современный PowerShell, а не cmd
Ноутбук либо откроется в браузере автоматически, либо вам нужно будет перейти по ссылке, которую вы увидите в выводе в терминале. По умолчанию Jupyter Notebook запускается на localhost:8888
.
Новый Jupyter Notebook можно создать, нажав на кнопку New
справа вверху:
Напишите print("Hello, world!")
(или что-нибудь на свой вкус) и нажмите Ctrl + Enter
, чтобы выполнить ячейку:
Также попробуйте импортировать в ноутбук pandas, чтобы убедиться, что эта библиотека видна в текущем окружении:
import pandas as pd
Закройте вкладки, вернитесь в терминал и нажмите Ctrl + C
, чтобы остановить сервер Jupyter Notebook. Для того чтобы выйти из виртуального окружения, исполните команду deactivate
. Проверьте, что Python снова стал системным, а ваша оболочка больше не знает команды jupyter-notebook
— и, собственно, всё. Удачи в изучении дата-анализа!
Приложение: Как использовать uv?
uv
— это одновременно менеджер разных версий Python, пакетов и виртуальных окружений. Управление версиями Питона не очень актуально для дата-специалистов, но uv
— это прежде всего очень удобно.
Установить uv
можно следующими командами:
# Unix
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
По умолчанию uv
будет использовать системный Python, установить и зафиксировать другие версии можно командами uv python install <version>
и uv python pin <version>
Создадим и активируем виртуальное окружение (предварительно я удалил всё из нашей рабочей директории):
uv venv
source .venv/bin/activate
Инициализируем новый проект:
uv init
uv
создал файлы проекта, зафиксировал версию Питона, инициализировал git-репозиторий, добавил минимальный .gitignore
. А с помощью pyproject.toml
мы сможем описать свой проект:
Имена всех наших зависимостей будут добавляться в блок dependencies, а их версии автоматически фиксироваться.
Чтобы добавить библиотеки в проект, выполним:
uv add pandas notebook
После установки зависимостей проверим pyproject.toml
:
Заметьте, что uv
добавил в него только основные зависимости нашего проекта (те, которые мы сами прописали), а зависимости зависимостей подразумеваются, но не перечислены явно, как в requirements.txt
. Это делает описание проекта чище и компактнее.
В статье вы узнаете, как создать виртуальную среду Python. Это может понадобиться Python-разработчикам для того, чтобы избежать проблем с библиотеками разных версий.
- Простой пример: у вас есть два приложения, которые подключаются к одной и той же библиотеке. Вот только каждому приложению нужны разные ее версии.
- Еще пример: вы хотите обеспечить работу приложения независимо от обновлений библиотек, которые устанавливаются в глобальном хранилище Python.
- И третий пример: у вас нет доступа к этому хранилищу.
Выход во всех трех случаях — создать venv
Python. Название модуля venv
— это сокращение от Virtual Environment, то есть виртуальная среда. Venv представляет собой отличный инструмент для изоляции проектов, своеобразную песочницу. В ней мы можем запускать приложение со своими зависимостями, чтобы не мешать другим приложениям, которые используют то же ПО, но иных версий. В результате каждое приложение будет запускаться в собственной виртуальной среде, изолированно от остальных, что повысит стабильность работы всех приложений.
Приятная новость: отдельно устанавливать venv
на Windows нам не потребуется, пакет является частью стандартной библиотеки Python 3 и поставляется вместе с интерпретатором.
Что касается Linux, то здесь venv
далеко не всегда входит в пакет операционной системы, поэтому может потребоваться его установить. На Ubuntu/Debian это делается следующей командой:
sudo apt install -y python3-venv
Некоторые пакеты Python требуют сборки из исходных кодов, поэтому также может потребоваться установка следующих пакетов:
sudo apt install -y build-essential libssl-dev libffi-dev python3-dev
Теперь рассмотрим, как создать виртуальное окружение Python 3 в Windows и Linux с помощью venv
.
Cloud
Шаг 1. Запускаем venv
Сначала идет общая команда для всех ОС:
python -m venv venv
Разберем ее чуть подробнее. Здесь -m
выступает в качестве инструкции для запуска модуля venv
. А вторая запись venv
указывает на каталог venv/lib/python3.8/site-packages/
(номер версии 3.8 добавлен просто для примера, она может быть и другой), в котором Python будет хранить все библиотеки и другие компоненты, необходимые для изолированной работы приложений.
Шаг 2. Активируем виртуальную среду
Активация виртуального окружения выполняется по-разному для Windows и Linux. В ОС от Microsoft понадобится запустить этот скрипт:
venv\Scripts\activate.bat
А в Linux (и также в MacOS) нужно ввести вот такую инструкцию:
source venv/bin/activate
Если всё сделано правильно, будет выведена следующая запись:
(venv) root@purplegate:/var/test#
Теперь можно приступать к работе над проектом в изолированном окружении.
Другие инструменты
Конечно, venv
является самым современным инструментом для создания виртуальной среды. Но он появился только в Python 3. А что делать тем, кто по каким-то причинам работает с более старыми версиями языка? Ответ: пробовать иные инструменты, которые имеют и ряд других полезных функций, иначе бы мы о них даже не упоминали. Кратко опишем эти решения, а затем рассмотрим подробнее наиболее популярное.
virtualenv
. Простой и понятный инструмент, который пригодится при развертывании многих приложений. Поэтому он будет полезен для освоения, и ниже мы представим инструкцию по работе с ним.pyenv
. Позволяет изолировать версии «Питона». Полезен, если по какой-то причине вам требуется запускать разные версии Python — например, для тестирования программы.virtualenvwrapper
. Обертка дляvirtualenv
, которая используется для хранения виртуальных сред и различных операций с ними (создание, копирование, удаление).Virtualenvwrapper
хорош тем, что с его помощью можно легко переключаться между средами и использовать различные плагины для расширения функций.
Создание виртуального окружения при помощи virtualenv
Рассмотрим этот процесс на примере ОС Linux. Впрочем, запуск virtualenv
в Windows выполняется почти так же, разница будет лишь в путях, которые здесь будут иными, и скриптах. И это мы будем оговаривать отдельно.
Шаг 1. Устанавливаем virtualenv
Можно скачать исходники приложения и поставить его вручную, но удобнее всего сделать это с помощью менеджера pip
. В этом случае всё, что вам понадобится, это ввести в консоли следующую инструкцию:
pip install virtualenv
Шаг 2. Создаем виртуальную среду
Этот шаг делается тоже при помощи всего одной небольшой инструкции:
virtualenv myenv
Эта простая команда создаст новый каталог в текущем. Разумеется, вместо myenv
вы можете ввести любое другое имя для своего окружения. Теперь разберем структуру созданной директории:
- в
/myenv/bin
будут размещены скрипты для работы с окружением, копия интерпретатора нужной версии, а также собственноpip
и ряд приложений для пакетной обработки. Если вы работаете в Windows, то эта папка будет иметь другой адрес:/myenv/Scripts
. - директории
/
myenv/lib
, а также/myenv/include
предназначены для хранения основных библиотек окружения. А все новые файлы будут загружаться в/myenv/lib/pythonX.X/site-packages/
, где вместо X.X будет указана ваша версия «Питона».
Шаг 3. Активируем виртуальную среду
В Linux и Windows это делается немного по-разному. Для Linux инструкция такая (будем использовать всё тот же пример с именем myenv
, которое вы замените на нужное вам):
source myenv/bin/activate
А вот так это будет выглядеть в Windows:
myenv\Scripts\activate.bat
При корректной активации вы увидите имя вашего виртуального окружения в нижней строке (выделили красным):
Если теперь создать виртуальную среду с ключом --
system-site-packages
, то вы получите доступ к общему хранилищу в рамках своей среды. Делается это так:
virtualenv --system-site-packages myenv
Обратите внимание, что путь к хранилищу в Linux и в Windows тоже будет разным: соответственно, для Линукса это будет /usr/lib/python3.8/site-packages
, а для Виндовc — \Python38\Lib\site-packages
. Цифры версии, опять же, для примера, у вас она может быть другой.
Шаг 4. Выходим из виртуальной среды
После завершения работы с программой из нее нужно корректно выйти. В Linux это делается командой deactivate
, а в Windows с помощью «батника», пакетного файла deactivate.bat
.
Что нового?
Помимо уже рассмотренного модуля venv
и virtualenv
, существуют и более современные инструменты, обеспечивающие более гибкое управление проектами на Python, в том числе и в виртуальном окружении:
- Poetry. Это менеджер, позволяющий управлять зависимостями приложения в виртуальной среде. Также он облегчает тесты и развертывание приложений, автоматизируя многие вещи.
- Pipenv. И еще один менеджер, который уже содержит в себе
pip
иvirtualenv
, а также ряд других полезных инструментов. Этот менеджер создан для облегчения управления окружениями и пакетами, ведь многие разработчики на определенной стадии развития проекта сталкиваются с проблемами из-за контроля версий.
По большому счету, каждый из этих менеджеров заслуживает отдельного разговора, но их возможности выходят далеко за рамки нашей статьи. Поэтому расскажем самое главное об этих продуктах.
Главное о Poetry
Poetry способен взять на себя всю работу с библиотеками в рамках виртуальной среды, в том числе устанавливать, обновлять и публиковать их. Например, возможностей pip
для этого уже не хватит. Кроме того, создание и упаковка приложения здесь реализована при помощи всего одной команды (замените myproject
на собственное название):
poetry new myproject
А, например, инструкция poetry init
позволит выполнить инициализацию проекта в уже созданной директории. Вводится эта инструкция из той же директории.
Также Poetry умеет выполнять публикацию проектов в частных репозиториях, отслеживать зависимости, а еще контролировать их версии. Наконец, он облегчает работу на собственных виртуальных серверах, обеспечивая надежную изоляцию ваших проектов. Найти этот замечательный инструмент можно здесь.
Главное о Pipenv
Если в двух словах, то Pipenv можно охарактеризовать, как pip
+ virtualenv
, но с продвинутыми возможностями. И на самом деле возможности этого менеджера гораздо шире. Так, он избавляет от необходимости пользоваться не слишком удобным файлом зависимостей requirements.txt
.
Вместо этого в Pipenv есть два других файла, один из которых, Pipfile.lock
, позволяет связывать версии библиотек, что хорошо для безопасности разрабатываемых приложений. Ну, а собственно Pipfile
является продвинутой заменой устаревшему файлу требований. А дело в том, что Pipfile
, в отличие от requirements.txt
, обновляется автоматически с изменением версий продукта, что здорово выручает при работе в команде, избавляя разработчиков от ошибок зависимостей. Pipenv можно найти здесь.
Что ж, теперь вы вооружены полным набором инструментов, и обилие зависимостей с разными версиями больше не должно вас пугать.
Один проект требует Django 4.2, другой — Flask и пару экспериментальных библиотек. Как не запутаться в зависимостях и сохранить порядок в системе? Ответ — виртуальное окружение. В этой статье разберемся, как с помощью venv создать изолированную среду и запустить в ней простое Python-приложение.
Что такое виртуальное окружение и зачем оно нужно
Виртуальное окружение — это изолированная от основной системы среда, содержащая все необходимые зависимости для работы программного обеспечения.
Разработчикам нередко приходится использовать разные версии библиотек, а иногда и самого Python для различных проектов. Чтобы не засорять глобальное окружение и избежать конфликтов между версиями, оптимальным решением становится создание виртуального окружения.
Python venv — один из самых популярных инструментов для этой задачи. Он входит в стандартную библиотеку Python и служит универсальным способом защиты от несовместимости установленных пакетов.
Прежде чем начать использовать виртуальную среду, её нужно создать и активировать. Далее разберёмся, как это сделать.
Создание, активация и деактивация venv
Чтобы создать виртуальное окружение с помощью venv, откройте командную строку и выполните следующую команду:
python3 -m venv env
В этой команде флаг -m указывает, что venv запускается как исполняемый модуль. Последняя часть команды (env) — это имя создаваемого виртуального окружения. В результате выполнения появится папка env (обычно в текущем каталоге), содержащая все необходимые файлы среды.
Внутри папки env находятся четыре основные директории — bin, include, lib, lib64 — и конфигурационный файл pyvenv.cfg.
- В папке bin размещаются исполняемые файлы и сценарии (в Windows вместо неё используется папка Scripts).
- Папка include содержит файлы, необходимые для компиляции некоторых пакетов.
- В каталогах lib и lib64 располагаются установленные библиотеки.
- Файл pyvenv.cfg хранит настройки, используемые при активации среды.
Чтобы начать работу в виртуальной среде, её нужно активировать. В Linux и macOS используется команда:
source env/bin/activate
В Windows — так:
env\Scripts\activate.bat
После успешной активации в командной строке появится приглашение вида:
(env) alex@alex-pc:~$
Теперь можно устанавливать пакеты, запускать скрипты и работать в изолированной среде. Когда работа завершена, окружение деактивируется простой командой:
deactivate
Если вы больше не планируете использовать среду, достаточно просто удалить папку env. Для получения справки по доступным аргументам и флагам используйте:
python3 -m venv -h
Вывод будет примерно таким:
Например:
- флаг —upgrade используется для обновления существующей среды;
- флаг —upgrade-deps — для обновления зависимостей до последних версий из PyPI;
- флаг -h (или —help) выводит справку, как показано выше.
Теперь можно перейти к запуску простой консольной программы в только что созданной виртуальной среде.
Запуск простой программы в venv
Итак, виртуальное окружение создано и активировано. Теперь попробуем запустить в нём простую программу. Сначала напишем следующий скрипт:
import datetime import pytz city_name = 'Иркутск' time_zone = pytz.timezone('Asia/Irkutsk') current_time = datetime.datetime.now(time_zone) print(f"Текущее время в городе {city_name}: {current_time.strftime('%H:%M')}")
Эта программа выводит в консоль текущее время в городе Иркутск. Для этого используются модули datetime и pytz, которые импортируются в начале. Затем создаётся переменная city_name с названием города. Далее определяется временная зона (time_zone) и передаётся в метод now() модуля datetime. Это позволяет получить объект current_time с актуальным временем для указанного города. Результат выводится на экран с помощью форматированной строки.
Сохраним файл под именем current-time.py рядом с директорией виртуального окружения. Чтобы запустить программу, в активированной среде выполните команду:
python3 current-time.py
Технически скрипт можно запускать и без активации среды, указав путь к интерпретатору Python из виртуального окружения:
./env/bin/python current-time.py
После запуска может появиться сообщение об ошибке: модуль pytz не найден. Установим его командой:
pip install pytz
Установка произойдёт только в рамках текущей виртуальной среды, и модуль будет доступен только в ней. В других окружениях его потребуется устанавливать отдельно. Теперь повторно запустим программу:
(env) alex@alex-pc:~$ python3 current-time.py Текущее время в городе Иркутск: 12:04
Это значит, что всё работает как нужно.
Рекомендуется для каждого проекта создавать отдельную директорию, а в ней — своё виртуальное окружение. Например, можно хранить проекты в папке Projects, а для этого случая создать подпапку current-time, где будет находиться файл current-time.py. В командной строке нужно перейти в эту папку и далее действовать, как описано во втором разделе этой статьи.
Работать с виртуальными средами особенно удобно в IDE PyCharm и редакторе Visual Studio Code с установленными расширениями для Python. В PyCharm при создании нового проекта сразу предлагается создать виртуальное окружение или указать путь к уже существующему.
Если вы открываете существующую папку проекта, в которой ещё нет окружения, PyCharm или Visual Studio Code позволят легко создать его вручную. В Visual Studio Code нужно открыть командную палитру через меню «Вид».
Потом в открывшемся окне выбрать пункт «Python: Выбор интерпретатора» и в следующем окне можно создать новую виртуальную среду или выбрать уже существующую:
Далее кратко рассмотрим альтернативные инструменты для управления виртуальными окружениями.
Альтернативные виртуальные окружения
Но, как говорится, на одном Python venv свет клином не сошелся.Существуют и другие инструменты для управления виртуальными средами.
- Virtualenv — во многом схож с venv, но обладает более широкими возможностями и поддерживает более старые версии Python.
- Poetry — управляет не только зависимостями и виртуальными окружениями, но и сборкой пакетов, публикацией проектов и всей их структурой.
- Conda — полноценный менеджер окружений и целая экосистема. Обладает собственным репозиторием пакетов и подходит не только для Python, но и для других языков.
- Pipenv — объединяет менеджер пакетов и менеджер виртуальных сред. Делает акцент на удобстве работы с зависимостями и автоматическом создании окружений.
- PyFlow — инструмент для управления пакетами, зависимостями и виртуальными средами. Подходит для упрощения процессов установки и настройки.
- Hatch — современный, расширяемый менеджер проектов. Надёжно управляет виртуальными средами и поддерживает создание пользовательских сценариев.
Полезные ссылки
Ниже — несколько ресурсов, которые будут особенно полезны начинающим Python-разработчикам:
- Создание виртуальных окружений — официальная документация по модулю venv.
- Виртуальные среды и пакеты — руководство по работе с пакетами внутри виртуальных окружений.
- Python-окружения в VS Code — инструкция по созданию и управлению Python-окружениями (в том числе виртуальными) в Visual Studio Code.
- Виртуальные окружения в Python —обзор виртуальных сред и инструментов для работы с ними на русском языке.
Пройдите тест, узнайте какой профессии подходите
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы
Введение в виртуальные окружения Python
Виртуальные окружения Python являются одним из ключевых инструментов для разработчиков, работающих с этим языком программирования. Они позволяют изолировать зависимости и пакеты для различных проектов, что особенно полезно, когда у вас есть несколько проектов с разными требованиями к библиотекам. Например, один проект может требовать использования библиотеки Django
версии 2.2, в то время как другой проект требует Django
версии 3.0. Без использования виртуальных окружений такие ситуации могут привести к конфликтам версий и сложности в управлении зависимостями.
Виртуальные окружения помогают избежать этих проблем, обеспечивая чистоту основной системы и позволяя каждому проекту иметь свои собственные зависимости. Это также облегчает процесс развертывания проектов на различных серверах и системах, так как вы можете быть уверены, что все необходимые библиотеки и их версии будут установлены корректно.

Установка и настройка virtualenv
Для создания виртуальных окружений в Python часто используют библиотеку virtualenv
. Она позволяет легко создавать изолированные окружения для каждого проекта, что делает управление зависимостями более удобным и безопасным.
Установка virtualenv
Для начала установим virtualenv
с помощью pip, который является стандартным менеджером пакетов для Python. Откройте терминал или командную строку и выполните следующую команду:
После установки вы сможете использовать команду virtualenv
для создания новых окружений. Убедитесь, что у вас установлена последняя версия pip, чтобы избежать возможных проблем с установкой.
Проверка установки
После установки virtualenv
рекомендуется проверить, что установка прошла успешно. Для этого выполните команду:
Если команда вернет номер версии, значит, virtualenv
установлен корректно и готов к использованию.
Создание виртуального окружения
Создание виртуального окружения — это простой процесс, который включает несколько шагов. Важно следовать этим шагам, чтобы избежать ошибок и обеспечить корректную работу окружения.
Шаг 1: Выбор директории
Первым шагом является выбор директории, где вы хотите создать виртуальное окружение. Это может быть любая папка на вашем компьютере, но обычно виртуальные окружения создаются внутри папки проекта. Например, если у вас есть проект в папке my_project
, вы можете создать виртуальное окружение внутри этой папки:
Шаг 2: Создание окружения
Используйте команду virtualenv
для создания нового окружения. Назовем его venv
:
Эта команда создаст папку venv
в директории вашего проекта, содержащую все необходимые файлы для изолированного окружения Python. Важно отметить, что вы можете назвать окружение как угодно, но venv
является стандартным и широко используемым именем.
Проверка создания
После создания окружения рекомендуется проверить, что все файлы были созданы корректно. Для этого перейдите в папку venv
и убедитесь, что там находятся поддиректории bin
или Scripts
(в зависимости от операционной системы), а также папка lib
.
Активирование и деактивирование окружения
После создания виртуального окружения его нужно активировать, чтобы начать использовать. Активирование окружения позволяет вам работать с изолированными зависимостями, не затрагивая глобальную среду Python.
Активирование окружения
Для активации окружения в Windows используйте команду:
В macOS и Linux используйте:
После активации вы увидите название вашего окружения в командной строке, что указывает на успешное активирование. Это позволяет вам легко понять, что вы работаете в изолированном окружении, а не в глобальной среде.
Деактивирование окружения
Чтобы деактивировать виртуальное окружение и вернуться к глобальной среде Python, используйте команду:
Эта команда завершит сессию виртуального окружения и вернет вас к глобальной среде Python. Это полезно, когда вы хотите переключиться между различными проектами или окружениями.
Управление пакетами в виртуальном окружении
Управление пакетами в виртуальном окружении осуществляется так же, как и в глобальной среде, с помощью pip. Это включает установку, удаление и обновление пакетов, а также управление их версиями.
Установка пакетов
Для установки пакетов используйте команду pip install
. Например, чтобы установить библиотеку requests
, выполните:
Эта команда загрузит и установит библиотеку requests
в ваше виртуальное окружение, не затрагивая глобальную среду Python. Вы можете установить любые пакеты, необходимые для вашего проекта, используя эту команду.
Удаление пакетов
Для удаления пакетов используйте команду pip uninstall
. Например, чтобы удалить библиотеку requests
, выполните:
Эта команда удалит библиотеку requests
из вашего виртуального окружения. Удаление пакетов может быть полезным, когда вы хотите освободить место или удалить ненужные зависимости.
Список установленных пакетов
Чтобы увидеть список всех установленных пакетов в вашем виртуальном окружении, используйте команду:
Эта команда выведет список всех установленных пакетов и их версий. Это полезно для проверки, какие библиотеки и версии установлены в вашем окружении.
Замораживание зависимостей
Для сохранения списка всех установленных пакетов и их версий в файл requirements.txt
, используйте команду:
Этот файл можно использовать для установки тех же пакетов в другом окружении с помощью команды:
Это особенно полезно при работе в команде или при развертывании проекта на сервере, так как позволяет легко воспроизвести окружение.
Заключение
Работа с виртуальными окружениями Python — это важный навык, который помогает управлять зависимостями и избегать конфликтов версий. Создание, активация, деактивация и управление пакетами в виртуальном окружении — это базовые операции, которые вы теперь можете выполнять. Виртуальные окружения облегчают работу с различными проектами и обеспечивают чистоту основной системы. Надеюсь, эта статья помогла вам понять, как работать с виртуальными окружениями Python. Удачи в ваших проектах! 😊