Виртуальные окружения Python

PythonBeginner
Практиковаться сейчас

Введение

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

В этой лабораторной работе вы на практике познакомитесь с пятью популярными инструментами для управления виртуальными окружениями и зависимостями Python:

  • virtualenv: Базовый инструмент для создания изолированных окружений Python.
  • Poetry: Универсальный инструмент для управления зависимостями, сборки и публикации пакетов.
  • Pipenv: Инструмент, призванный объединить лучшие практики управления пакетами в экосистеме Python.
  • Anaconda: Популярная платформа для анализа данных, включающая мощные возможности управления окружениями.
  • UV: Чрезвычайно быстрый менеджер пакетов и резолвер нового поколения для Python.

По завершении этой работы вы сможете выбирать и использовать инструмент, наиболее подходящий для нужд вашего проекта.

virtualenv

В этом шаге вы научитесь использовать virtualenv для создания и управления изолированными окружениями Python. virtualenv — это инструмент для создания изолированных сред, позволяющий тестировать код в «песочнице» и не перегружать глобальную установку Python библиотеками, нужными лишь для одного проекта. Инструмент уже предустановлен в вашей системе.

Сначала создадим директорию для хранения виртуальных окружений, а затем создадим новое окружение с именем HelloWorld. Откройте терминал в WebIDE и выполните следующие команды:

mkdir -p ~/.virtualenvs
virtualenv ~/.virtualenvs/HelloWorld

Вы увидите вывод процесса создания окружения. Оно будет размещено в директории ~/.virtualenvs/HelloWorld.

created virtual environment CPython3.10.12.final.0-64 in 257ms
  creator CPython3Posix(dest=/home/labex/.virtualenvs/HelloWorld, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/labex/.local/share/virtualenv)
    added seed packages: pip==24.0, setuptools==69.5.1, wheel==0.43.0
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

Теперь активируем виртуальное окружение. Приглашение командной строки изменится и будет включать (HelloWorld), что означает, что окружение активно. Все, что вы установите с помощью pip, будет относиться только к этому окружению и не затронет глобальную установку Python.

source ~/.virtualenvs/HelloWorld/bin/activate

После активации приглашение будет выглядеть так:

(HelloWorld) labex:project/ $

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

deactivate

Обратите внимание, что префикс (HelloWorld) исчез из приглашения терминала.

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

source ~/.virtualenvs/HelloWorld/bin/activate

Приглашение снова изменится, и вы вернетесь в окружение HelloWorld, готовое к работе над проектом.

Poetry

В этом шаге вы познакомитесь с Poetry — современным инструментом для управления зависимостями и сборки пакетов в Python. Он позволяет объявлять библиотеки, от которых зависит ваш проект, и берет на себя их установку и обновление. Poetry уже установлен в этой среде.

Убедитесь, что вы деактивировали предыдущее виртуальное окружение:

deactivate

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

poetry new my-poetry-project

Эта команда создает новую директорию my-poetry-project со следующей структурой:

my-poetry-project
├── pyproject.toml
├── README.md
├── my_poetry_project
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_my_poetry_project.py

Самый важный файл здесь — pyproject.toml, который управляет проектом и его зависимостями. Давайте посмотрим на его содержимое:

cat my-poetry-project/pyproject.toml

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

[tool.poetry]
name = "my-poetry-project"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.10"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

Теперь перейдите в директорию нового проекта:

cd my-poetry-project

Чтобы добавить новую зависимость, используйте команду poetry add. Poetry автоматически подберет подходящую версию и добавит её в pyproject.toml. Давайте добавим библиотеку pendulum:

poetry add pendulum

Чтобы установить все зависимости, указанные в pyproject.toml (например, при клонировании проекта), выполните:

poetry install

Наконец, чтобы удалить зависимость, используйте команду poetry remove:

poetry remove pendulum

Это удалит пакет и соответствующим образом обновит файл pyproject.toml.

Pipenv

В этом шаге вы научитесь использовать Pipenv — инструмент, призванный объединить лучшие практики управления пакетами в Python. Он автоматически создает и управляет виртуальным окружением для ваших проектов, а также добавляет или удаляет пакеты из вашего Pipfile при их установке или удалении.

Сначала создайте директорию для нового проекта и перейдите в неё:

cd ~/project
mkdir my_pipenv_project
cd my_pipenv_project

Теперь установим пакет. Pipenv автоматически создаст новое виртуальное окружение и файл Pipfile для отслеживания зависимостей. Установим библиотеку requests:

pipenv install requests

После завершения команды в директории появятся два новых файла: Pipfile и Pipfile.lock. Pipfile используется для отслеживания необходимых проекту зависимостей. Давайте посмотрим на его содержимое:

cat Pipfile

В выводе вы увидите пакет requests в разделе [packages].

[[source]]
url = "https://pypi.org/simple"
verify_ssl = false
name = "pypi"

[packages]
requests = "*"

[dev-packages]

[requires]
python_version = "3.10"

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

pipenv shell

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

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

pipenv uninstall requests

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

exit

Anaconda

В этом шаге вы начнете работу с Anaconda. Anaconda — это дистрибутив Python и R для научных вычислений, который упрощает управление пакетами и развертывание. Его менеджер пакетов conda отлично подходит для создания и управления окружениями. Команда conda доступна в вашем терминале.

Сначала создадим новое окружение с именем my_conda_env. Мы также укажем версию Python. Флаг -y автоматически подтверждает все запросы.

cd ~/project
conda create -n my_conda_env python=3.10 -y

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

conda activate my_conda_env

Теперь перед приглашением терминала будет стоять префикс (my_conda_env), указывающий на то, что окружение активно. Все пакеты, которые вы установите сейчас, будут относиться только к этому окружению. Давайте установим numpy в качестве примера:

conda install numpy -y

Когда вы закончите работу в окружении, вы можете деактивировать его:

conda deactivate

Префикс исчезнет из приглашения, и вы вернетесь в базовое окружение.

UV

В этом шаге вы откроете для себя UV — чрезвычайно быстрый установщик и резолвер пакетов Python от компании Astral, создателей Ruff. Он разработан как прямая замена рабочим процессам pip и pip-tools и может работать в 10–100 раз быстрее. UV уже предустановлен для вас.

Начнем с инициализации нового проекта. Команда uv init создаст файл pyproject.toml и виртуальное окружение в директории .venv.

cd ~/project
uv init my-uv-project

Теперь перейдите в директорию созданного проекта:

cd my-uv-project

Чтобы добавить зависимость, используйте команду uv add. Это похоже на poetry add или npm install. Добавим библиотеку requests:

uv add requests

UV автоматически обнаруживает и использует виртуальное окружение в текущей директории. Вы можете выполнять команды внутри этого управляемого окружения с помощью uv run. Давайте проверим версию Python внутри окружения:

uv run python --version

Вы должны увидеть версию Python виртуального окружения, а не глобальную.

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

source .venv/bin/activate

Приглашение изменится на (.venv), указывая на то, что окружение активно. Чтобы выйти из активированной оболочки, используйте команду deactivate:

deactivate

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

Резюме

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

Вы научились:

  • Использовать virtualenv для создания, активации и управления базовыми изолированными окружениями.
  • Применять Poetry для унифицированного рабочего процесса, который обрабатывает создание проекта, управление зависимостями и сборку пакетов через файл pyproject.toml.
  • Использовать Pipenv для декларативного управления зависимостями приложения с помощью Pipfile, что упрощает настройку среды разработки.
  • Работать с Anaconda (conda) для создания и управления окружениями — инструмент, особенно популярный в сообществе специалистов по анализу данных благодаря надежной работе со сложными пакетами.
  • Открыли для себя UV — новый, чрезвычайно быстрый инструмент, который объединяет установку пакетов, разрешение зависимостей и управление окружениями в одном бинарном файле.

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