Локальные виртуальные среды Python: настройка и использование

Раздел: Администрирование -> Настройка локального окружения

Основные подходы к изоляции Python-окружений

Как создать изолированное окружение без установки дополнительных инструментов?

Встроенный модуль venv позволяет создать изолированную среду для любого проекта. Это наиболее простой и рекомендуемый способ для стандартных задач.


# Создание окружения с именем myenv
python -m venv myenv

# Активация в Linux/macOS
source myenv/bin/activate

# Активация в Windows (PowerShell)
myenv\Scripts\Activate.ps1

# Установка пакета внутри окружения
pip install requests

# Деактивация
deactivate
  

Python local (локальное окружение python)

После активации все команды python и pip указывают на локальное окружение. Окружение наследует версию Python, которая вызвала команду создания.

Проблема: на Windows при запуске скрипта активации может возникнуть ошибка выполнения сценариев из-за политики ExecutionPolicy.

Решение: разрешить выполнение скриптов только для текущей сессии:

Set-ExecutionPolicy Unrestricted -Scope Process

Или использовать командную строку (cmd) с файлом myenv\Scripts\activate.bat.

Проблема: если команда python не найдена, нужно указать полный путь к интерпретатору.

Решение: использовать путь, например C:\Python39\python -m venv myenv.

Цель использования: базовая изоляция зависимостей для небольших проектов, когда не требуется сложное управление версиями Python.

Как получить больше возможностей, чем встроенный venv?

Инструмент virtualenv (ранее standalone) предоставляет дополнительные опции: поддержку разных версий Python через флаг -p, более быструю работу и совместимость со старыми версиями Python (2.x).


# Установка virtualenv
pip install virtualenv

# Создание окружения с указанием версии Python
virtualenv -p /usr/bin/python3.10 myenv

# Активация и деактивация аналогично venv
source myenv/bin/activate
deactivate
  

Проблема: если указать несуществующий путь к интерпретатору, virtualenv выдаст ошибку.

Решение: предварительно проверить доступные версии командой which python3.10 или where python.

Случаи использования: проекты, требующие конкретной версии Python, или унаследованные кодовые базы.

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

Pipenv объединяет управление пакетами и виртуальными окружениями через файлы Pipfile и Pipfile.lock. Он автоматически создаёт окружение при выполнении команд.


# Установка pipenv
pip install pipenv

# Создание окружения и установка пакета
pipenv install requests

# Активация окружения
pipenv shell

# Установка зависимостей из существующего Pipfile
pipenv install
  

Проблема: установка может занимать много времени из-за разрешения зависимостей.

Решение: использовать флаг --skip-lock для быстрой установки без блокировки версий.

Проблема: конфликты с уже установленными глобальными пакетами.

Решение: всегда работать внутри активированного окружения pipenv.

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

Как получить современный инструмент с управлением зависимостями и сборкой?

Poetry использует стандарт pyproject.toml и предлагает полный цикл управления зависимостями, публикации пакетов и сборки. Окружение создаётся автоматически при выполнении команд.


# Установка poetry (рекомендуется через pipx)
pipx install poetry

# Создание нового проекта
poetry new myproject
cd myproject

# Установка пакета (добавляет в pyproject.toml и обновляет poetry.lock)
poetry add requests

# Активация окружения
poetry shell

# Установка зависимостей по файлу
poetry install
  

Проблема: при миграции с requirements.txt может потребоваться ручное преобразование.

Решение: использовать команду poetry add $(cat requirements.txt) или скрипты конвертации.

Случаи использования: разработка библиотек, сложные проекты с чёткими требованиями к версиям.

Как настроить окружение с не-Python зависимостями (например, для Data Science)?

Conda (из дистрибутива Anaconda или Miniconda) управляет не только Python, но и системными библиотеками. Создаёт изолированную среду с поддержкой разных версий Python и пакетов.


# Создание окружения с конкретной версией Python
conda create -n myenv python=3.9

# Активация
conda activate myenv

# Установка пакетов (например, numpy)
conda install numpy

# Деактивация
conda deactivate
  

Проблема: окружения Conda могут занимать много места, так как содержат дублирующиеся библиотеки.

Решение: использовать mamba для более быстрой установки и минимизации размера, либо установить только Miniconda.

Проблема: перепутывание каналов (channels) может привести к несовместимости.

Решение: указывать канал явно: conda install -c conda-forge numpy.

Случаи использования: проекты машинного обучения, обработки данных, где требуются библиотеки вроде TensorFlow или PyTorch с не-Python зависимостями.

Как использовать разные версии Python в разных проектах с помощью pyenv?

Pyenv позволяет устанавливать и переключать глобальные и локальные версии Python. В комбинации с venv даёт полный контроль.


# Установка нужной версии (например, 3.9.7)
pyenv install 3.9.7

# Создание локальной версии для текущего каталога
pyenv local 3.9.7

# Создание venv на основе этой версии
python -m venv myenv

# Активация (обычная)
source myenv/bin/activate
  

Проблема: на Linux может потребоваться установка зависимостей для сборки Python из исходников.

Решение: выполнить команду, предлагаемую pyenv при ошибке, например sudo apt-get install build-essential libssl-dev zlib1g-dev ....

Случаи использования: проекты, требующие разных версий Python, например, тестирование совместимости.

Расширенные примеры работы с инструментами изоляции

Пример 1: Poetry с детальным деревом зависимостей

Пример

# Создание нового проекта
poetry new project-data
cd project-data

# Добавление нескольких пакетов
poetry add pandas numpy scikit-learn

# Вывод дерева зависимостей
poetry show --tree
  
  pandas 1.5.3 Powerful data structures for data analysis
  ├── numpy >=1.21.0 (1.23.5)
  └── python-dateutil >=2.8.1 (2.8.2)
      └── six >=1.5 (1.16.0)
  numpy 1.23.5 NumPy is the fundamental package for array computing with Python.
  scikit-learn 1.2.2 A set of python modules for machine learning and data mining
  ├── numpy >=1.17.3 (1.23.5)
  ├── scipy >=1.3.2 (1.10.1)
  └── joblib >=1.1.1 (1.2.0)
  

Демонстрируется, как Poetry автоматически разрешает и фиксирует все транзитивные зависимости.

Пример 2: Pipenv с импортом requirements.txt

Пример

# Создаём файл requirements.txt с фиксацией версий
echo "flask==2.3.0" > requirements.txt
echo "gunicorn==20.1.0" >> requirements.txt

# Импорт в Pipenv
pipenv install -r requirements.txt

# Просмотр Pipfile
cat Pipfile
  
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
flask = "==2.3.0"
gunicorn = "==20.1.0"

[dev-packages]

[requires]
python_version = "3.9"
  

Pipenv переносит зависимости в собственный формат и автоматически создаёт Pipfile.lock при установке.

Пример 3: venv с указанием версии Python через pyenv

Пример

# Установка Python 3.11 через pyenv
pyenv install 3.11.3

# Создание окружения с этой версией
pyenv local 3.11.3
python -m venv myenv-311

# Проверка версии внутри окружения
source myenv-311/bin/activate
python --version
  
Python 3.11.3
  

Метод удобен для проектов, требующих конкретной минорной версии Python, которая не является системной.

Пример 4: Conda с экспортом окружения в YAML

Пример

# Создание окружения с пакетами для Data Science
conda create -n datascience python=3.10 numpy pandas matplotlib -y
conda activate datascience

# Экспорт окружения
conda env export > environment.yml

# Просмотр файла
cat environment.yml
  
name: datascience
channels:
  - defaults
  - conda-forge
dependencies:
  - python=3.10
  - numpy=1.24.3
  - pandas=1.5.3
  - matplotlib=3.7.1
  - pip:
    - some-pip-package==1.0.0
prefix: /home/user/.conda/envs/datascience
  

Экспорт позволяет воссоздать точное окружение на другой машине или сервере.

Пример 5: Установка зависимостей из локального файла с помощью pip и venv

Пример

# Подготовка файла с архивом пакета
pip download flask==2.3.0 -d ./packages
# создаст flask-2.3.0-py2.py3-none-any.whl

# Создание окружения и установка из локальной папки
python -m venv offline-env
source offline-env/bin/activate
pip install --no-index --find-links ./packages flask
  

Подходит для изолированных сетей или офлайн-установок.

Локальное окружение Python - comments

En
Python local (python)