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

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

Введение

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

В этой лабораторной работе вы создадите виртуальное окружение с помощью встроенного модуля venv, активируете его, установите пакет, а затем создадите второе окружение, чтобы убедиться в их полной изоляции. Все действия выполняются в директории /home/labex/project.

Создание виртуального окружения проекта

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

Сначала перейдите в рабочую директорию проекта. Хранение файлов лабораторной работы в /home/labex/project позволяет легко находить окружение и отделять вашу работу от системных файлов.

cd /home/labex/project

Перед созданием окружения проверьте версию Python, доступную в системе. Команда python3 --version выводит версию интерпретатора, которую будет использовать venv.

python3 --version

Вы должны увидеть вывод, похожий на этот:

Python 3...

Теперь создайте виртуальное окружение с именем project-env. Опция -m venv указывает Python запустить встроенный модуль venv как инструмент командной строки, а project-env — это имя директории, в которой будет размещено окружение.

python3 -m venv project-env

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

ls project-env

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

bin
include
lib
pyvenv.cfg

Файл pyvenv.cfg фиксирует параметры создания окружения. Изучите его содержимое.

cat project-env/pyvenv.cfg

Найдите строку include-system-site-packages = false. Эта настройка означает, что данное окружение не будет автоматически использовать глобально установленные пакеты Python.

Активация окружения и установка пакета

На этом этапе вы активируете project-env и установите в него пакет. Активация изменяет переменные окружения оболочки (shell) таким образом, что команды python и pip в первую очередь обращаются к виртуальному окружению.

Убедитесь, что вы находитесь в рабочей директории проекта.

cd /home/labex/project

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

source project-env/bin/activate

После активации приглашение командной строки обычно начинается с (project-env). Убедитесь, что python теперь указывает на виртуальное окружение, выведя два пути из Python. sys.prefix — это активное окружение, а sys.base_prefix — базовая установка Python.

python -c "import sys; print(sys.prefix); print(sys.base_prefix)"

Первая строка должна указывать на ваше виртуальное окружение, а вторая — на системное расположение Python:

/home/labex/project/project-env
/usr...

Установите небольшой пакет colorama в активное окружение. Запуск python -m pip использует pip, который принадлежит текущему активному интерпретатору Python.

python -m pip install colorama==0.4.6

Когда установка завершится, pip сообщит об успешной установке colorama.

Проверьте наличие пакета из Python, импортировав его и выведя версию.

python -c "import colorama; print(colorama.__version__)"

Вывод должен быть таким:

0.4.6

Вы можете выйти из виртуального окружения с помощью команды deactivate. Это вернет поведение поиска python и pip к обычному состоянию системной оболочки.

deactivate

Создание второго изолированного окружения

На этом этапе вы создадите еще одно виртуальное окружение и сравните его с project-env. Разные окружения могут использовать один и тот же базовый интерпретатор Python, сохраняя при этом свои установленные пакеты отдельно.

Вернитесь в рабочую директорию проекта.

cd /home/labex/project

Найдите системный исполняемый файл python3. Команда command -v выводит путь, который оболочка будет использовать для выполнения команды.

command -v python3

Обычно путь выглядит так:

/usr/bin/python3

Создайте второе окружение с именем tools-env. Опция --prompt tools-env задает текст приглашения при активации, что удобно при работе с несколькими окружениями.

python3 -m venv --prompt tools-env tools-env

Теперь сравните префиксы двух окружений. Каждая команда запускает исполняемый файл Python внутри соответствующего виртуального окружения и выводит его активный префикс.

project-env/bin/python -c "import sys; print(sys.prefix)"
tools-env/bin/python -c "import sys; print(sys.prefix)"

Вы должны увидеть две разные директории:

/home/labex/project/project-env
/home/labex/project/tools-env

Наконец, проверьте, доступен ли colorama в tools-env. Вы установили colorama только в project-env, поэтому второе окружение не должно его найти.

tools-env/bin/python -c "import importlib.util; print(importlib.util.find_spec('colorama'))"

Ожидаемый вывод:

None

Это подтверждает, что пакеты, установленные в одном виртуальном окружении, не появляются автоматически в другом.

Резюме

Вы создали виртуальное окружение Python, изучили его конфигурацию, активировали его, установили пакет и создали второе окружение, чтобы подтвердить изоляцию пакетов. Вы также попрактиковались в использовании python3 -m venv, source, python -m pip и прямых путей к интерпретаторам Python, чтобы понимать, какой именно интерпретатор выполняется в данный момент.