Как запустить venv на windows

#статьи


  • 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.

Пример ошибки активации виртуального окружения в редакторе VS Code
Скриншот: 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

Результат команды показывает, что мы используем PIP версии 24.2 в виртуальном окружении django_2_2_env. Это подтверждает, что мы работаем в нужном окружении с Django 2.2. Также в выводе указана версия Python. В данном случае это новая версия Python 3.12, которая может быть несовместима с Django 2.2
Скриншот: Visual Studio Code / Skillbox Media

После активации виртуального окружения Python создаёт структуру файлов и папок, обеспечивающую изоляцию проекта и управление зависимостями. Эта структура включает в себя папки Include, Lib и Scripts, а также файл pyvenv.cfg:

Структура файлов и папок виртуального окружения Python venv
Скриншот: 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

Если альтернативная команда не сработала, закройте все программы и процессы, которые могут использовать файлы в этой директории. Затем перезапустите редактор кода и попробуйте снова удалить окружение. Такова она, жизнь программиста ¯\(ツ)/¯

Мы удалили django_3_2_env, и в каталоге файлов осталось лишь django_2_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-разработчикам для того, чтобы избежать проблем с библиотеками разных версий.

  • Простой пример: у вас есть два приложения, которые подключаются к одной и той же библиотеке. Вот только каждому приложению нужны разные ее версии.
  • Еще пример: вы хотите обеспечить работу приложения независимо от обновлений библиотек, которые устанавливаются в глобальном хранилище 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

При корректной активации вы увидите имя вашего виртуального окружения в нижней строке (выделили красным):

Image1

Если теперь создать виртуальную среду с ключом --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

Вывод будет примерно таким:

Установка venv

Например:

  • флаг —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 при создании нового проекта сразу предлагается создать виртуальное окружение или указать путь к уже существующему.

Шаг 1

Источник: автор статьи

Если вы открываете существующую папку проекта, в которой ещё нет окружения, PyCharm или Visual Studio Code позволят легко создать его вручную. В Visual Studio Code нужно открыть командную палитру через меню «Вид». 

Шаг 2

Источник: автор статьи

Потом в открывшемся окне выбрать пункт «Python: Выбор интерпретатора» и в следующем окне можно создать новую виртуальную среду или выбрать уже существующую:

Шаг 3

Источник: автор статьи

Далее кратко рассмотрим альтернативные инструменты для управления виртуальными окружениями.

Альтернативные виртуальные окружения

Но, как говорится, на одном Python venv свет клином не сошелся.Существуют и другие инструменты для управления виртуальными средами.

  • Virtualenv — во многом схож с venv, но обладает более широкими возможностями и поддерживает более старые версии Python.
  • Poetry — управляет не только зависимостями и виртуальными окружениями, но и сборкой пакетов, публикацией проектов и всей их структурой.
  • Conda — полноценный менеджер окружений и целая экосистема. Обладает собственным репозиторием пакетов и подходит не только для Python, но и для других языков.
  • Pipenv — объединяет менеджер пакетов и менеджер виртуальных сред. Делает акцент на удобстве работы с зависимостями и автоматическом создании окружений.
  • PyFlow — инструмент для управления пакетами, зависимостями и виртуальными средами. Подходит для упрощения процессов установки и настройки.
  • Hatch — современный, расширяемый менеджер проектов. Надёжно управляет виртуальными средами и поддерживает создание пользовательских сценариев.

Полезные ссылки

Ниже — несколько ресурсов, которые будут особенно полезны начинающим Python-разработчикам:

  • Создание виртуальных окружений — официальная документация по модулю venv.
  • Виртуальные среды и пакеты — руководство по работе с пакетами внутри виртуальных окружений.
  • Python-окружения в VS Code — инструкция по созданию и управлению Python-окружениями (в том числе виртуальными) в Visual Studio Code.
  • Виртуальные окружения в Python —обзор виртуальных сред и инструментов для работы с ними на русском языке.

Виртуальное окружение (venv)

Содержание

  • Настройка виртуального окружения
  • Создание

  • Активация

  • Автоматическая активация

  • Деактивация

  • Альтернативы venv

Все сторонние пакеты устанавливаются менеджером PIP глобально. Проверить это можно просто командой pip show <имя_пакета>.

root@purplegate:~# pip3 show pytest
Name: pytest
Version: 5.3.2
Summary: pytest: simple powerful testing with Python
Home-page: https://docs.pytest.org/en/latest/
Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, ...
License: MIT license
Location: /usr/local/lib/python3.8/site-packages
Requires: more-itertools, pluggy, py, wcwidth, attrs, packaging
Required-by:

Location — путь до ваших глобальных пакетов.

В большинстве случаев, устанавливать пакеты глобально — плохая идея 🙅‍♂️ Почему? Рассмотрим простой пример:

Допустим у нас есть два проекта: «Project A» и «Project B». Оба проекта зависят от библиотеки Simplejson. Проблема возникает, когда для «Project A» нужна версия Simplejson 3.0.0, а для проекта «Project B» — 3.17.0. Python не может различить версии в глобальном каталоге site-packages — в нем останется только та версия пакета, которая была установлена последней.

Решение данной проблемы — создание виртуального окружения (virtual environment).

Основная цель виртуального окружения Python — создание изолированной среды для python-проектов

Это означает, что каждый проект может иметь свои собственные зависимости, независимо от других проектов.

Настройка виртуального окружения

Один из самых популярных инструментов для создания виртуального окружения — virtualenv. Однако в данной статье мы будем рассматривать более свежий инструмент venv.

Устанавливать venv не нужно — он входит в стандартную библиотеку Python

Создание

Для создания виртуального окружения, перейдите в директорию своего проекта и выполните:

python -m venv venv

-m — флаг для запуска venv как исполняемого модуля.
venv — название виртуального окружения (где будут храниться ваши библиотеки).

В результате будет создан каталог venv/ содержащий копию интерпретатора Python, стандартную библиотеку и другие вспомогательные файлы. Все новые пакеты будут устанавливаться в venv/lib/python3.x/site-packages/.

Содержимое каталога venv.

Виртуальное окружение также можно создать в IDE PyCharm, для этого:

  1. Зайдите в настройки интерпретатора («Settings» → «Project:<name>» → «Project Interpreter«);
  2. Нажмите на шестеренку в верхнем правом углу, выберите «Add..«;
  3. Выберите «Virual Enviroment» и задайте параметры.
Создание виртуального окружения в IDE PyCharm.

Активация

Чтобы начать пользоваться виртуальным окружением, необходимо его активировать:

  • venv\Scripts\activate.bat — для Windows;
  • source venv/bin/activate — для Linux и MacOS.

source выполняет bash-скрипт без запуска дополнительного bash-процесса.

Проверить успешность активации можно по приглашению оболочки. Она будет выглядеть так:

(venv) root@purplegate:/var/test#

Также новый путь до библиотек можно увидеть выполнив команду:

python -c "import site; print(site.getsitepackages())"

Если вы используете IDE PyCharm, то при открытии проекта он автоматически найдет созданное виртуальное окружение и уведомит о его использовании. Проверить настройки виртуального окружения можно в «Settings» → «Project:<name>» → «Project Interpreter» (путь до интерпретатора должен быть вида [путь до проекта]/venv/Scripts/python.exe).

Интересный факт: в виртуальном окружении вместо команды python3 и pip3, можно использовать python и pip

Автоматическая активация

В некоторых случаях, процесс активации виртуального окружения может показаться неудобным (про него можно банально забыть 🤷‍♀️).

На практике, для автоматической активации перед запуском скрипта, создают скрипт-обертку на bash:

#!/usr/bin/env bash

source $BASEDIR/venv/bin/activate
python $BASEDIR/my_app.py

Теперь можно установить права на исполнение и запустить нашу обертку:

chmod +x myapp/run.sh
./myapp/run.sh

Деактивация

Закончив работу в виртуальной среде, вы можете отключить ее, выполнив консольную команду:

deactivate

Альтернативы venv

На данный момент существует несколько альтернатив для venv:

  • pipenv — это pipfile, pip и virtualenv в одном флаконе;
  • pyenv — простой контроль версий Питона;
  • poetry — новый менеджер для управления зависимостями;
  • autoenv — среды на основе каталогов;
  • pew — инструмент для управления несколькими виртуальными средами, написанными на чистом Python;
  • rez — интегрированная система конфигурирования, сборки и развертывания пакетов для программного обеспечения.

Стоит ли использовать виртуальное окружение в своей работе — однозначно да. Это мощный и удобный инструмент изоляции проектов друг от друга и от системы. С помощью виртуального окружения можно использовать даже разные версии Python!

Однако рекомендуем присмотреться к более продвинутым вариантам, например к pipenv или poetry.

Введение

Привет! Меня зовут Женя и я работаю аналитиком данных. В этой статье я бы хотел рассказать начинающим аналитикам о том, как правильно настроить окружение для работы с Python. Когда я только начинал заниматься анализом данных, концепция питоновского виртуального окружения вводила меня в ступор, и здесь я постараюсь показать, что в ней нет ничего сложного.

Для этого мы:

  1. Установим Python

  2. Создадим и активируем виртуальное окружение при помощи базовых инструментов pip и venv

  3. В качестве примера установим библиотеки notebook и pandas

  4. Посмотрим на базовое управление зависимостями через requirements.txt

  5. Запустим 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. Это делает описание проекта чище и компактнее.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Установить msi windows server
  • Windows 10 features bios gigabyte
  • Python перенос строки windows
  • Что означает восстановление windows
  • Как сделать разный фон на двух мониторах windows 10