Виртуальные окружения Python
Во многих случаях при разработке приложений на Python нам требуются сторонние библиотеки. Однако, если мы будем их устанавливать в глобальное окружение, мы в какой-то момент столкнемся с конфликтами между разными проектами, нам будет сложнее производить очистку такого окружения. А в некоторых ситуациях мы можем даже сломать системные приложения.
Чтобы избежать таких проблем, рекомендуется практически всегда использовать виртуальные окружения. Это специальная папка, куда устанавливаются библиотеки и которых может быть больше одной на вашем компьютере. В python 3 есть встроенное средства для управления ими - пакет
Для того чтобы создать новое виртуальное окружение, выполните команду с указанием нужного вам питона:
После этого в каталоге имя_папки будет создано множество служебных файлов и установлен
Для того чтобы работать внутри виртуального окружения, вы можете:
a. Запустить команду с указанием пути. Например, python, pip или поставляемые сторонними пакетами. На Linux это будет
b. Активировать его внутри вашей командной оболочки (основной сценарий). Для bash/zsh это
Типичные ошибки при работе с venv:
• Не использовать виртуальные окружения. Задумайтесь, что вы будете делать, когда двум вашим проектам потребуется одна библиотека разных версий. Или когда вы решите удалить библиотеки, не указанные в списке зависимостей, чтобы быть уверенным, что проект требует только их.
• Перемещать или копировать виртуальное окружение в другую локацию или на другой компьютер. Некоторые инструменты это позволяют делать в отдельных случаях, но
• Добавлять папку с виртуальным окружением в систему контроля версий (например, git). Вместо этого стоит фиксировать список зависимостей, чтобы окружение можно было пересоздать в любой момент.
• Устанавливать pip вне виртуального окружения. Это может случайно привести к работе с зависимостями вне venv и путанице.
• Предполагать, что IDE сама знает, где находится виртуальное окружение. Несмотря на то, что часто это так, иногда бывает недопонимание с ней. Разберитесь, как в вашей IDE настраивать использование виртуального окружения. Также обязательно научитесь работать с окружениями без использования IDE.
• Помещать файлы проекта внутрь виртуального окружения. Это достаточно бессмысленное действие, потому что сценарии работы с venv и файлами проекта сильно отличаются (например, он может быть при необходимости пересоздан). Куда лучше хранить venv внутри папки проекта.
Хочу отметить, что если вы используете другие инструменты управления окружениями, то правила работы с ними могут отличаться.
Дополнительные материалы:
• https://docs.python.org/3/library/venv.html
• https://python-poetry.org/docs/
• https://peps.python.org/pep-0405/
Во многих случаях при разработке приложений на Python нам требуются сторонние библиотеки. Однако, если мы будем их устанавливать в глобальное окружение, мы в какой-то момент столкнемся с конфликтами между разными проектами, нам будет сложнее производить очистку такого окружения. А в некоторых ситуациях мы можем даже сломать системные приложения.
Чтобы избежать таких проблем, рекомендуется практически всегда использовать виртуальные окружения. Это специальная папка, куда устанавливаются библиотеки и которых может быть больше одной на вашем компьютере. В python 3 есть встроенное средства для управления ими - пакет
venv
, но есть и сторонние популярные решения такие как virtualenv, poetry и многие другие.Для того чтобы создать новое виртуальное окружение, выполните команду с указанием нужного вам питона:
python -m venv имя_папки
После этого в каталоге имя_папки будет создано множество служебных файлов и установлен
pip
. Часто в качестве папки указывают venv
или .venv
.Для того чтобы работать внутри виртуального окружения, вы можете:
a. Запустить команду с указанием пути. Например, python, pip или поставляемые сторонними пакетами. На Linux это будет
./имя_папки/bin/python
, на Windows - имя_папки\Scripts\python
(пути могут быть относительные или абсолютные). Это бывает удобно внутри скриптов или файлов сервисов. В этом случае, sys.path
будет содержать каталог библиотек внутри виртуального окружения. Учтите, что так как переменная PATH
не меняется, то запуск других команд (например, через subprocess) без указания пути будет фактически происходить вне виртуального окружения.b. Активировать его внутри вашей командной оболочки (основной сценарий). Для bash/zsh это
source ./имя_папки/bin/activate
. Для Windows CMD - имя_папки\Scripts\activate.bat
. После этого в рамках сессии вашего шелла будет изменена переменная окружения PATH
, что приведет к изменению команд, доступных без указания пути. Соответственно, если таким образом будет запущена команда (python
, pip
и т.д.) из виртуального окружения, то и sys.path
будет изменен, как и в прошлом способе. Так же будет задана переменная окружения VIRTUAL_ENV
. Для заверешния работы с виртуальным окружением введите команду deactivate
.Типичные ошибки при работе с venv:
• Не использовать виртуальные окружения. Задумайтесь, что вы будете делать, когда двум вашим проектам потребуется одна библиотека разных версий. Или когда вы решите удалить библиотеки, не указанные в списке зависимостей, чтобы быть уверенным, что проект требует только их.
• Перемещать или копировать виртуальное окружение в другую локацию или на другой компьютер. Некоторые инструменты это позволяют делать в отдельных случаях, но
venv
не из таких. Окружение просто сломается и будет вести себя непредсказуемо. Исключение - копирование между идентичными образами ОС, например, при сборке контейнеров.• Добавлять папку с виртуальным окружением в систему контроля версий (например, git). Вместо этого стоит фиксировать список зависимостей, чтобы окружение можно было пересоздать в любой момент.
• Устанавливать pip вне виртуального окружения. Это может случайно привести к работе с зависимостями вне venv и путанице.
• Предполагать, что IDE сама знает, где находится виртуальное окружение. Несмотря на то, что часто это так, иногда бывает недопонимание с ней. Разберитесь, как в вашей IDE настраивать использование виртуального окружения. Также обязательно научитесь работать с окружениями без использования IDE.
• Помещать файлы проекта внутрь виртуального окружения. Это достаточно бессмысленное действие, потому что сценарии работы с venv и файлами проекта сильно отличаются (например, он может быть при необходимости пересоздан). Куда лучше хранить venv внутри папки проекта.
Хочу отметить, что если вы используете другие инструменты управления окружениями, то правила работы с ними могут отличаться.
Дополнительные материалы:
• https://docs.python.org/3/library/venv.html
• https://python-poetry.org/docs/
• https://peps.python.org/pep-0405/