Виртуальные среды Python

Все исходники / Язык программирования Python / OS Windows / Начало для разработок / Установка и настройка / Виртуальные среды Python
Оглавление:
  1. Что такое виртуальная среда Python
  2. Создание виртуальной среды Python
  3. Активация виртуальной среды
  4. Установка пакетов Python в виртуальную среду
  5. requirements.txt для формирования виртуальной среды
  6. Создание requirements.txt
  7. Копирование виртуальной среды в другое расположение
  8. Удаление виртуальной среды

Что такое виртуальная среда Python

Виртуальная среда Python фэнтези

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

Для решения этой проблемы Python-разработчики нашли блестящий выход – virtual environment, изолированная виртуальная среда для каждого отдельного проекта с собственным набором программных модулей и «персональным» интерпретатором Python. Активированная виртуальная среда прикрепляет программный код проекта к требуемой версии интерпретатора и версиям пакетов программного обеспечения. Таким образом проект изолируется от других интерпретаторов и программных модулей, установленных в операционной системе.

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

Создание виртуальной среды Python

Виртуальная среда создается с помощью командной строки, запущенной в выбранном для установки каталоге. Для вызова командной строки в текущем каталоге удобно набрать команду cmd в адресной строке проводника Windows и нажать клавишу Enter.

venv – модуль 3-й версии интерпретатора Python для создания виртуальной среды. Для создания virtual environment в окне командной строки запускается команда:
py -m venv env, где
py - средство запуска (launcher) последней версии Python установленной на текущей платформе Windows, справка обо всех опциях: py -h;
-m – опция запуска пакета venv как скрипта, без этой опции текстовые символы после py интерпретируются как файловый путь;
venv - пакет стандартной библиотеки Python (начиная с Python 3.3) для создания виртуальных сред;
env – название папки для создания и наполнения файлами виртуальной среды в текущем каталоге, может быть любым удобным.

Создание виртуальной среды Python в текущем каталоге
Создание виртуальной среды Python в текущем каталоге

Расширенные команды создания виртуальной среды:
py -m venv G:\MyProjects\Hosting\IIS\django-waitress\env - по абсолютному пути для установки из любого места файловой системы;
py -3.10 -m venv env - создание виртуальной среды с интерпретатором версии 3.10.

В операционной системе может быть установлено несколько версий Python, проверить количество которых можно командой:
py --list
с файловыми путями:
py --list-paths

Проверка установленных интерпретаторов Python
Проверка установленных интерпретаторов Python

По умолчанию, при создании виртуальной среды, устанавливается программа pip в качестве средства для загрузки других пакетов из хранилища программного обеспечения для языка программирования Python PyPI (Python Package Index) . PyPI помогает вам находить и устанавливать программное обеспечение, разработанное и распространяемое сообществом Python.

Активация виртуальной среды

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

Среда активируется вызовом скрипта активации в окне командной строки из каталога, где находится папка виртуальной среды:
env\scripts\activate - для операционной системы Windows слеши должны быть обязательно обратные.
Команда деактивации виртуальной среды запускает соответствующий скрипт:
env\scripts\deactivate
Активация и деактивация виртуальной среды из любого места по абсолютному пути, например:
G:\MyProjects\Hosting\IIS\django-waitress\env\scripts\activate
G:\MyProjects\Hosting\IIS\django-waitress\env\scripts\deactivate

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

Версия интерпретатора для проекта Python до активации и после активации виртуальной среды
Версия интерпретатора для проекта Python до активации и после активации виртуальной среды

Установка пакетов Python в виртуальную среду

При разработке проектов Python требуется установка различных пакетов из каталогов программного обеспечения. Кроме того, установка одного пакета часто требует установку дополнительных программных компонентов. Для упрощения этих процедур в комплект виртуальной среды включена программа-установщик pip. Установка пакетов Python в активированную виртуальную среду инициируется командами в окне командной строки в такой последовательности:
1. Вызов командной строки в текущей папке (например, набрав команду cmd в проводнике Windows).
2. Активация виртуальной среды (смотрите выше).
3. Установка пакета командой
pip install название_пакета, например:
pip install "Django==4.2.4" - в результате установятся пакеты для веб-фреймворка Django версии 4.2.4;
pip install Django - установятся пакеты для веб-фреймворка Django последней версии.

Удаление пакетов происходит аналогичным способом из активированной виртуальной среды командой:
pip uninstall Django - в результате удалится пакет django из виртуальной среды.
Необходимо иметь в виду что вместе с одним требуемым пакетом могут устанавливаться сопутствующие пакеты необходимые для работы, но при этом не происходит их комплектное удаление, некоторые пакеты необходимо удалять вручную (так происходит, например, и с установкой Django).

Данный способ подходит для добавления одиночных пакетов по мере требования. Но для формирования полной конфигурации виртуальной среды со множеством пакетов рациональней использовать их список в специальном файле требований - requirements.txt.

requirements.txt для формирования виртуальной среды

Когда необходима установка комплектов пакетов Python, то для этого удобнее пользоваться их списком указанном в текстовом файле requirements.txt. Принято называть этот файл requirements.txt, но его можно назвать любым именем. В файле прописывается список пакетов, требуемых для проекта, например, вот список для проекта Django:
asgiref==3.7.2
Django==4.2.4
mysqlclient==2.2.0
setuptools==63.2.0
sqlparse==0.4.4
typing_extensions==4.6.3
tzdata==2023.3

Комплектная установка на основе списка requirements.txt, после создания виртуальной среды и ее активации, происходит командой:
pip install -r название_файла, где
Опция -r означает установку из файла требований, например:
pip install -r requirements.txt

Установка пакетов python списком requirements.txt
Установка пакетов python списком requirements.txt

Если в вашем списке пакетов будет присутствовать установка программы pip, то после вышеуказанной команды выбросится ошибка:
ERROR: To modify pip, please run the following command: G:\MyProjects\Hosting\IIS\django-waitress\env\Scripts\python.exe -m pip install -r requirements.txt
Дело в том, что программа pip устанавливается и модифицируется непосредственно интерпретатором Python, но сами пакеты устанавливаются с помощью pip. В таком случае команда установки всех пакетов и программы pip должна указывать абсолютный или относительный путь до интерпретатора виртуальной среды, например:
G:\MyProjects\Hosting\IIS\django-waitress\env\Scripts\python.exe -m pip install -r requirements.txt ,
Или находясь в папке django-waitress:
env\Scripts\python.exe -m pip install -r requirements.txt
В этом случае нет необходимости активировать виртуальную среду, только точно указать путь до её интерпретатора.

После успешной установки пакетов можно проверить список установленных пакетов командой в активированной вирт среде:
pip list

Список установленных пакетов Python в виртуальной среде
Список установленных пакетов Python в виртуальной среде

Конечно же существует парная команда для удаления пакетов по списку файла:
pip uninstall -r requirements.txt
Выполнение данной командой удаление пакетов происходит поэтапно: после удаления каждого пакета будет запрашиваться подтверждение на удаление следующего и т. д. до удаления всех пакетов в списке.

Создание requirements.txt

Файл требований создается программой pip при активированной виртуальной среде, командой:
pip freeze > requirements.txt - команда запишет список требований на установку пакетов и их версий в текстовый файл requirements.txt. Запишет пакеты кроме программных инструментов: pip, setuuptools, wheel и т.п.
Команда:
pip freeze > requirements.txt –all - запишет в файл все установленные в виртуальной среде пакеты и программные инструменты.

Создание файла требований установки пакетов requirements.txt
Создание файла требований установки пакетов requirements.txt

Копирование виртуальной среды в другое расположение

Как правило, при разработке проектов в IDE, виртуальные среды насыщаются множеством пакетов. При публикации приложения в другое расположение обычно не копируется виртуальная среда проекта, но создается новая по файлу requirements.txt (смотрите выше). Это связано с тем, что в рабочих файлах виртуальной среды прописывается абсолютный путь ее местонахождения. Конечно же, в случае копирования среды в новое место, прописанный при создании путь не изменяется и становится ложным для текущего расположения.

Но всё-таки можно обойти это ограничение и скорректировать путь размещения каталога виртуальной среды. Пути размещения виртуальной среды прописаны в ее файлах:
activate, строка -
VIRTUAL_ENV="G:\MyProjects\Hosting\IIS\django-waitress\env"
activate.bat, строка -
set VIRTUAL_ENV=G:\MyProjects\Hosting\IIS\django-waitress\env
В конце файлов программы установщика пакетов -
pip.exe
pip3.11.exe (или соответствующей версии)
pip3.exe

После копирования виртуальной среды в другое расположение, в случае необходимости, можно вручную отредактировать путь на текущий каталог в вышеназванных файлах. Для этой цели можно использовать редактор исходного кода Notepad++, который не изменяет формат файла. С появлением новых версий Python такой «хакерский» способ, возможно, придется скорректировать.

Путь виртуальной среды в файле pip.exe
Путь виртуальной среды в файлах pip.exe, pip3.11.exe, pip3.exe

В принципе можно не переустанавливать все пакеты виртуальной среды, требуется только удалить программу pip и переустановить виртуальную среду с той же версией Python (поскольку пакеты виртуалки могут не работать с другими версиями интерпретаторов). Pip удаляется непосредственно с помощью интерпретатора виртуальной среды без ее активации, поэтому следует набрать команду:
env\Scripts\python.exe -m pip uninstall pip – командная строка запущена в каталоге нахождения виртуальной среды.
G:\MyProjects\Hosting\IIS\django-waitress\env\Scripts\python.exe -m pip uninstall pip – удаление необходимого pip с любого места по абсолютному пути.

Удаление pip и переустановка виртуальной среды Python
Удаление pip и переустановка виртуальной среды Python

После переустановки virtual environment установится pip и скрипты активации-деактивации с корректными путями текущего каталога.

Удаление виртуальной среды

Одно из достоинств виртуальных сред Python это их автономность: все составляющие virtual environment находятся в одном каталоге. Поэтому временные или ненужные виртуальные среды просто удаляются как обычные каталоги, без остаточного мусора в операционной системе. Перед удалением каталога виртуальной среды закройте все работающие копии интерпретатора Python, использующие данную виртуальную среду.