Несмотря на свою простоту и популярность языку Python, как и всем языкам программирования, присущи свои недостатки. Например, Python имеет слабую совместимость между версиями интерпретатора и между версиями программных пакетов. Не всегда код, написанный на новых версиях, будет корректно работать на старых версиях. И если вести одновременную разработку новых проектов и поддержку старых, то система из разных версий интерпретаторов Python, пакетов и модулей скорее всего выдаст сбой.
Для решения этой проблемы Python-разработчики нашли блестящий выход – virtual environment, изолированная виртуальная среда для каждого отдельного проекта с собственным набором программных модулей и «персональным» интерпретатором 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 – название папки для создания и наполнения файлами виртуальной среды в текущем каталоге, может быть любым удобным.
Расширенные команды создания виртуальной среды: py -m venv G:\MyProjects\Hosting\IIS\django-waitress\env - по абсолютному пути для установки из любого места файловой системы; py -3.10 -m venv env - создание виртуальной среды с интерпретатором версии 3.10.
В операционной системе может быть установлено несколько версий Python, проверить количество которых можно командой: py --list
с файловыми путями: py --list-paths
По умолчанию, при создании виртуальной среды, устанавливается программа 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 требуется установка различных пакетов из каталогов программного обеспечения. Кроме того, установка одного пакета часто требует установку дополнительных программных компонентов. Для упрощения этих процедур в комплект виртуальной среды включена программа-установщик 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.
Когда необходима установка комплектов пакетов 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
Если в вашем списке пакетов будет присутствовать установка программы 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
Конечно же существует парная команда для удаления пакетов по списку файла: pip uninstall -r requirements.txt
Выполнение данной командой удаление пакетов происходит поэтапно: после удаления каждого пакета будет запрашиваться подтверждение на удаление следующего и т. д. до удаления всех пакетов в списке.
Файл требований создается программой pip при активированной виртуальной среде, командой: pip freeze > requirements.txt - команда запишет список требований на установку пакетов и их версий в текстовый файл requirements.txt. Запишет пакеты кроме программных инструментов: pip, setuuptools, wheel и т.п.
Команда: pip freeze > requirements.txt –all - запишет в файл все установленные в виртуальной среде пакеты и программные инструменты.
Как правило, при разработке проектов в 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 и переустановить виртуальную среду с той же версией 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 с любого места по абсолютному пути.
После переустановки virtual environment установится pip и скрипты активации-деактивации с корректными путями текущего каталога.
Одно из достоинств виртуальных сред Python это их автономность: все составляющие virtual environment находятся в одном каталоге. Поэтому временные или ненужные виртуальные среды просто удаляются как обычные каталоги, без остаточного мусора в операционной системе. Перед удалением каталога виртуальной среды закройте все работающие копии интерпретатора Python, использующие данную виртуальную среду.