Виртуальное окружение Python: создание и конфигурация
Создание виртуального окружения с помощью встроенного модуля venv
Как создать изолированную среду для проекта Python без установки дополнительных пакетов?
Начиная с Python 3.3 в стандартную библиотеку входит модуль venv. Это рекомендуемый способ создания виртуальных окружений, так как он не требует внешних зависимостей и полностью поддерживается разработчиками языка.
python3 -m venv myenvкак создать виртуальную среду python (создание виртуальной среды python)
Команда создаёт директорию myenv с копией интерпретатора Python и стандартной библиотеки. После создания окружение необходимо активировать.
# Linux/macOS
source myenv/bin/activate
# Windows (cmd)
myenv\Scripts\activate
# Windows (PowerShell)
.\myenv\Scripts\Activate.ps1
После активации в начале командной строки появится префикс (myenv). Теперь все установленные пакеты будут изолированы от глобальной системы.
Типичная ошибка: при активации в Windows PowerShell может появиться сообщение о запрете выполнения сценариев. Решение - запустить PowerShell от имени администратора и выполнить:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
После этого активация должна работать.
Другая проблема: если команда python3 не найдена, попробуйте python или укажите полный путь к интерпретатору.
Как использовать virtualenv для совместимости с Python 2 или старыми проектами?
Пакет virtualenv является предшественником venv и поддерживает Python 2.7. Для установки требуется pip:
pip install virtualenv
virtualenv myenv -p python3.8
Параметр -p позволяет явно указать версию интерпретатора. Активация и работа не отличаются от venv.
Если virtualenv не устанавливается из-за прав, стоит использовать --user:
pip install --user virtualenv
Как создать окружение с управлением зависимостями через Pipenv?
Pipenv объединяет управление пакетами и виртуальными окружениями. После установки (pip install pipenv) создаётся проект с файлами Pipfile и Pipfile.lock.
pipenv install requests
pipenv shell
Команда pipenv install автоматически создаёт виртуальное окружение, если его нет, и устанавливает пакет. pipenv shell активирует среду.
Ошибка: если Pipenv не может найти версию Python, нужно задать её в файле .env или через PIPENV_PYTHON.
Как использовать Poetry для продвинутого управления зависимостями?
Poetry предлагает современный подход с pyproject.toml. Установка:
pip install poetry
poetry new myproject
cd myproject
poetry add flask
poetry new создаёт структуру проекта, poetry add устанавливает пакет в виртуальное окружение. Активация: poetry shell.
Как создать изолированное окружение для научных вычислений с Conda?
Conda от Anaconda подходит для проектов с не-Python зависимостями (C, R). Команда:
conda create -n myenv python=3.10 numpy pandas
conda activate myenv
Минус - большой размер установленной Conda (около 500 МБ). Альтернатива - Miniconda.
При использовании Conda с существующим venv возможны конфликты путей. Рекомендуется удалить все переменные окружения PYTHONPATH перед созданием среды.
Расширенные примеры работы с виртуальными окружениями
1. Создание окружения с указанием конкретной версии Python через pyenv + venv
Если требуется версия Python, отсутствующая в системе, можно использовать pyenv:
# Установка pyenv (Linux/macOS)
curl https://pyenv.run | bash
pyenv install 3.11.5
pyenv local 3.11.5
python -m venv myenv_3_11
Результат: создаётся окружение, использующее Python 3.11.5, установленный pyenv.
$ python --version Python 3.11.5 $ source myenv_3_11/bin/activate (myenv_3_11) $ python --version Python 3.11.5
2. Использование requirements.txt с разными окружениями
Зафиксировать зависимости после активации:
pip freeze > requirements.txt
# Затем в новом окружении:
pip install -r requirements.txt
Проблема: pip freeze выводит все установленные пакеты, включая зависимости. Для чистоты лучше использовать pip list --format=freeze или инструменты вроде pip-tools.
3. Создание временного окружения для тестирования
Модуль tempfile позволяет создать окружение в оперативной памяти:
import tempfile
import subprocess
import venv
with tempfile.TemporaryDirectory() as tmpdir:
venv.create(tmpdir, with_pip=True)
subprocess.run([f"{tmpdir}/bin/pip", "install", "pytest"])
# запуск тестов...
Этот подход полезен в CI/CD, когда не нужно сохранять окружение после завершения.
4. Скрипт автоматической активации при входе в директорию (direnv)
Утилита direnv автоматически загружает окружение при cd в папку. Файл .envrc:
layout python3
При входе в директорию direnv выполнит python3 -m venv и активирует окружение. Результат в терминале:
direnv: loading .envrc direnv: export +VIRTUAL_ENV
5. Клонирование существующего окружения
С помощью virtualenv-clone можно скопировать окружение в другую папку:
pip install virtualenv-clone
virtualenv-clone source_env target_env
При этом копия сохраняет все установленные пакеты и пути Python, но не изменяет исходное окружение.