Виртуальное окружение Python: как настроить и использовать
Создание и активация виртуального окружения Python
Как создать изолированную среду для проекта Python с помощью встроенного модуля venv?
Виртуальное окружение (virtual environment) позволяет изолировать зависимости проекта от системного интерпретатора и других проектов. Начиная с Python 3.3, в стандартную поставку включён модуль venv. Это основной и наиболее рекомендуемый способ для большинства задач.
python -m venv my_project_envAnaconda python jupiter (anaconda и python jupyter (установка))
Команда создаёт папку my_project_env с копией интерпретатора, библиотек и утилит. После создания необходимо активировать окружение:
# Windows (cmd / PowerShell)
my_project_env\Scripts\activate
# macOS / Linux (bash / zsh)
source my_project_env/bin/activateвиртуальная среда python (создание и активация виртуального окружения python)
При успешной активации в начале командной строки появится имя окружения в скобках. Теперь все установки через pip будут попадать в изолированную папку.
Деактивация осуществляется командой:
deactivate
Типичная ошибка: выполнение активации на Windows через Scripts\activate без указания пути. Если используется PowerShell, может потребоваться сначала разрешить выполнение скриптов:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
На Linux/macOS может возникнуть ошибка Permission denied. Решение - дать права на выполнение: chmod +x my_project_env/bin/activate.
Какие альтернативы существуют, если требуется поддержка старых версий Python или дополнительные функции?
virtualenv - более старая, но гибкая утилита, работающая с Python 2.7+. Устанавливается через pip:
pip install virtualenv
virtualenv my_project_env --python=python3.8
Позволяет указывать конкретную версию интерпретатора. Активация аналогична venv.
Проблема: если virtualenv не находит указанную версию Python, следует убедиться что интерпретатор установлен и доступен в PATH.
Как управлять окружениями в научных проектах с помощью conda?
Для работы с пакетами, не всегда доступными в PyPI (например, численные библиотеки с оптимизированными сборками), удобно использовать Conda (часть дистрибутива Anaconda/Miniforge):
conda create -n my_project python=3.10
conda activate my_project
Conda создаёт окружение в собственной директории и позволяет устанавливать как Python-пакеты, так и системные библиотеки.
Ошибка: conda command not found - необходимо добавить папку с Conda в PATH или переустановить Anaconda.
Как автоматизировать управление зависимостями и окружением с Poetry?
Poetry - современный инструмент для управления проектами Python, который создаёт виртуальное окружение автоматически при первом запуске poetry install.
poetry new my_project
cd my_project
poetry add requests # автоматически создаёт окружение и устанавливает пакет
poetry shell # активация окружения
Poetry использует файлы pyproject.toml и poetry.lock для воспроизводимых установок.
Как использовать pipenv для комбинирования Pipfile и Pipfile.lock?
Pipenv предложен сообществом как надстройка над pip, venv и Pipfile:
pip install pipenv
pipenv install requests # создаёт окружение и Pipfile
pipenv shell # активация
Активация работает аналогично venv, но окружения хранятся в единой папке (по умолчанию ~/.local/share/virtualenvs/).
Проблема: pipenv может создавать окружения с неожиданными именами. Решение - использовать переменную PIPENV_VENV_IN_PROJECT=1 для создания .venv внутри проекта.
Расширенные примеры и нестандартные сценарии
1. Создание окружения с указанием конкретного пути к интерпретатору (venv)
# Windows
python -m venv --python="C:\Python38\python.exe" my_env
# macOS/Linux
python -m venv --python=/usr/bin/python3.9 my_env
Результат: будет создано окружение на базе Python 3.8/3.9, независимо от того, какая версия стоит по умолчанию в PATH.
2. Установка зависимостей из requirements.txt в созданное окружение
# Активируем окружение
source my_env/bin/activate
# Устанавливаем пакеты
pip install -r requirements.txt
# Сохраняем актуальный список (если нужно)
pip freeze > requirements.txt
После выполнения все пакеты, перечисленные в requirements.txt, будут установлены внутри окружения. Команда freeze перезаписывает файл точными версиями.
3. Интеграция с VS Code: автоматический выбор окружения
# Создаём окружение внутри папки проекта
cd my_project
python -m venv .venv
# Открываем VS Code
code .
VS Code обнаружит папку .venv и предложит использовать её как интерпретатор. Альтернативно можно вручную выбрать: Ctrl+Shift+P -> Python: Select Interpreter -> указать путь к python.exe в .venv.
4. Клонирование окружения на другую машину с помощью pip freeze и requirements.txt
# На исходной машине (окружение активно)
pip freeze > requirements.txt
# Копируем файл на другую машину
# Создаём новое окружение и устанавливаем
python -m venv cloned_env
source cloned_env/bin/activate
pip install -r requirements.txt
Результат: на целевой машине будет установлен тот же набор версий пакетов, что и на исходной.
5. Использование virtualenvwrapper для удобного управления несколькими окружениями
pip install virtualenvwrapper
export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh
mkvirtualenv my_project_env # создаёт и сразу активирует
workon my_project_env # переключение между окружениями
deactivate # выход
rmvirtualenv my_project_env # удаление
Утилита хранит все окружения в одной папке (WORKON_HOME) и упрощает переключение.
6. Создание окружения с помощью pyenv-virtualenv (для пользователей pyenv)
# Предварительно установить pyenv и pyenv-virtualenv
pyenv install 3.11.0
pyenv virtualenv 3.11.0 my_project_env
pyenv activate my_project_env # или pyenv local my_project_env для автоматической активации в папке
Позволяет создавать окружения на основе конкретной версии Python, установленной через pyenv.
7. Использование venv в CI/CD (пример GitHub Actions)
# .github/workflows/test.yml
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Create and activate virtual environment
run: |
python -m venv venv
source venv/bin/activate
- name: Install dependencies
run: |
source venv/bin/activate
pip install -r requirements.txt
- name: Run tests
run: |
source venv/bin/activate
pytest
В CI-среде активация выполняется явно на каждом шаге, так как каждый шаг - новый shell.
8. Создание окружения с помощью Conda из YAML-файла для воспроизводимости
# environment.yml
name: my_project
channels:
- conda-forge
- defaults
dependencies:
- python=3.10
- numpy
- pandas
- pip
- pip:
- requests
# Команда для создания
conda env create -f environment.yml
conda activate my_project
Файл YAML полностью описывает окружение, включая pip-зависимости. Воспроизводимость гарантируется указанием версий.
9. Отключение автоматической активации окружения в Poetry (для сценариев без shell)
poetry run python script.py # запустить скрипт внутри окружения без активации
poetry run pytest # запустить тесты
Команда poetry run выполняет произвольную команду в контексте окружения, не активируя его в текущей оболочке.
10. Удаление окружения - проверка и очистка
# Для venv / virtualenv
rm -rf my_env
# Для Conda
conda env remove -n my_project
# Для Poetry
poetry env remove my_project
# Для Pipenv
pipenv --rm
После удаления все установленные пакеты и интерпретатор внутри окружения будут уничтожены.