Управление виртуальными окружениями в Python (venv)

Раздел: Управление окружением -> Виртуальные окружения

Виртуальные окружения в Python позволяют изолировать зависимости проектов, предотвращая конфликты версий пакетов. Модуль venv, входящий в стандартную библиотеку начиная с Python 3.3, предоставляет все необходимые инструменты для создания и управления такими окружениями. В этой части рассматриваются основные команды, альтернативные способы настройки и типичные затруднения.

Как создать и активировать виртуальное окружение с помощью venv?

Стандартный и наиболее часто используемый способ - вызов модуля venv с указанием имени каталога будущего окружения:

python -m venv myenv

Python venv ubuntu (создать виртуальное окружение python в ubuntu)

После этого в текущей папке появляется каталог myenv со структурой, включающей интерпретатор pip и копию стандартной библиотеки. Для начала работы окружение необходимо активировать. На разных операционных системах команды различаются:

  • Windows (командная строка cmd):
    myenv\Scripts\activate

    Python activate window (активация виртуального окружения python в windows)

  • Windows (PowerShell):
    myenv\Scripts\Activate.ps1

    Python venv exit (выход из виртуального окружения python)

  • Linux / macOS (bash, zsh):
    source myenv/bin/activate

    Venv python version (версия python в виртуальном окружении)

При успешной активации в командной строке появляется префикс в виде названия окружения в скобках. Для деактивации используется команда deactivate.

Типичные ошибки и их решение:

  • Ошибка «Python не является внутренней или внешней командой» - Python не добавлен в PATH. Следует установить галочку «Add Python to PATH» при установке или указать полный путь к интерпретатору.
  • Ошибка «ModuleNotFoundError: No module named 'venv'» - в некоторых минимальных установках Linux пакет python3-venv отсутствует. Необходимо установить его через менеджер пакетов (например, sudo apt install python3-venv).
  • На PowerShell не удаётся выполнить скрипт из-за политики исполнения - запустить PowerShell от имени администратора и выполнить Set-ExecutionPolicy RemoteSigned.

Как создать виртуальное окружение для конкретной версии Python?

Если в системе установлено несколько интерпретаторов (например, Python 3.8 и Python 3.10), можно явно указать нужный:

python3.10 -m venv myenv_py310

Python venv commands (команды виртуального окружения python)

Либо используя полный путь к интерпретатору:

C:\Python310\python.exe -m venv myenv_py310

Python django venv (настройка виртуального окружения для django)

Это позволяет создавать окружения, привязанные к определённой мажорной или минорной версии Python.

Проблема: После создания окружения в нём может оказаться не та версия. Стоит проверить командой python --version внутри активированного окружения.

Как включить доступ к глобально установленным пакетам?

По умолчанию venv создаёт полностью изолированную среду. Флаг --system-site-packages разрешает видеть системные пакеты внутри окружения:

python -m venv --system-site-packages myenv

Python venv linux (использование виртуального окружения на linux)

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

Риск: Если в системе пакет обновится, это может сломать работу проекта внутри окружения. Рекомендуется использовать полную изоляцию, если проект требует строгой воспроизводимости.

Как создать окружение без pip и установить его позже?

Иногда требуется создать окружение без предустановленного pip - например, для использования альтернативных менеджеров (conda). Для этого используется флаг --without-pip:

python -m venv --without-pip myenv

Python unable to create venv (ошибка создания виртуального окружения python)

После активации такого окружения pip в нём отсутствует. Его можно установить вручную командой:

python -m ensurepip --upgrade

Venv bin python (путь к интерпретатору в виртуальном окружении)

Или загрузить get-pip.py и выполнить его.

Почему это нужно? Некоторые образы Docker или CI-окружения могут быть настроены на собственную процедуру установки pip. Также это позволяет контролировать версию устанавливаемого pip.

Как воспроизвести окружение на другой машине?

После активации исходного окружения создаётся файл со списком установленных пакетов и их версий:

pip freeze > requirements.txt

Venv python 3 (создание виртуального окружения с python 3)

На целевой машине создаётся новое виртуальное окружение, активируется, и пакеты устанавливаются из этого файла:

pip install -r requirements.txt

Python venv install packages (установка пакетов в виртуальное окружение python)

Это стандартный способ переноса зависимостей. Однако pip freeze не фиксирует все подзависимости, если они не были явно запрошены. Для полной воспроизводимости рекомендуется указывать точные версии пакетов.

Ошибка: Если на целевой системе отличается версия Python, часть пакетов может оказаться несовместимой. Следует убедиться, что интерпретаторы совпадают.

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

Достаточно деактивировать текущее окружение и удалить его каталог:

deactivate
rm -rf myenv   # на Linux/macOS
rmdir /s myenv # на Windows

Никаких дополнительных действий не требуется.

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

Расширенные примеры команд

Создание окружения с очисткой предыдущей версии

Флаг --clear удаляет существующее окружение перед созданием заново, сохраняя имя каталога:

Пример
python -m venv --clear myenv

Полезно при перестроении окружения без лишних действий.

Принудительное использование копий вместо ссылок (Windows)

На Windows venv по умолчанию использует копии файлов. Флаг --symlinks (или --copies) не имеет эффекта на Windows, но на Linux/macOS можно явно указать:

Пример
python -m venv --symlinks myenv   # использовать символьные ссылки (по умолчанию)
python -m venv --copies myenv     # копировать файлы вместо ссылок

Копии занимают больше места, но не зависят от изменений в исходном интерпретаторе.

Установка пакетов с игнорированием зависимостей

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

Пример
pip install --no-deps requests==2.28.1

Это может привести к неработоспособности пакета, но иногда используется для минимизации состава окружения.

Экспорт списка пакетов с хэшами (для верификации)

Команда pip freeze --all выводит не только пакеты, установленные явно, но и все зависимости с контрольными суммами:

Пример
pip freeze --all > requirements-hashed.txt

Пример содержимого:

certifi==2023.7.22 --hash=sha256:...
charset-normalizer==3.2.0 --hash=sha256:...
...

При повторной установке pip проверит хэши, что гарантирует целостность пакетов.

Проверка целостности установленных пакетов

Команда pip check анализирует зависимости на предмет конфликтов:

Пример
pip check
No broken requirements found.

Если обнаружены несоответствия, выводится информация о конфликтующих пакетах.

Обновление pip внутри окружения

Старые версии pip могут работать медленно. Рекомендуется обновить его сразу после активации:

Пример
pip install --upgrade pip

Если в окружении не хватает прав (особенно в Linux), добавляется флаг --user:

Пример
pip install --upgrade --user pip

Но в изолированном окружении это редко требуется.

Отображение списка пакетов в удобном формате

Команда pip list поддерживает несколько форматов вывода. Например, в виде таблицы:

Пример
pip list --format=columns
Package    Version
---------- -------
pip        23.2.1
setuptools 68.0.0

Или в формате, пригодном для автоматической обработки (json):

Пример
pip list --format=json
[{"name": "pip", "version": "23.2.1"}, ...]

Различия в активации между оболочками

Для оболочки fish активация выглядит иначе:

Пример
source myenv/bin/activate.fish

А для csh/tcsh:

Пример
source myenv/bin/activate.csh

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

Проблема длинных путей на Windows

Если путь к каталогу окружения превышает 260 символов, активация может завершиться ошибкой. Решение - создать окружение в корне диска или использовать короткие имена:

Пример
python -m venv C:\venvs\projA

Также можно включить поддержку длинных путей через групповые политики Windows.

Установка пакетов прямо из репозитория GitHub

Виртуальное окружение позволяет устанавливать пакеты напрямую из VCS:

Пример
pip install git+https://github.com/psf/requests.git@main

Это удобно для тестирования последних изменений.

Команды виртуального окружения Python - comments

En
Python venv commands (python)