venv Python
Введение
Модуль venv поддерживает создание облегченных “виртуальных сред”, каждая из которых имеет свой собственный
независимый набор пакетов Python, установленных в каталогах их сайтов.
Виртуальная среда создается поверх существующей установки Python, известной как “базовый” Python виртуальной
среды, и при желании может быть изолирована от пакетов в базовой среде, поэтому доступны только те, которые
явно установлены в виртуальной среде.
При использовании из виртуальной среды обычные средства установки, такие как pip, будут устанавливать пакеты
Python в виртуальную среду без необходимости получения явного указания на это.
Смотрите
PEP 405
для получения дополнительной информации о виртуальных средах Python. А таже
официальный самоучитель
Установка
Входит в состав Python3 поэтому обычно не требует установки.
Если вы работаете в
WSL
типа
Debian
/
Ubuntu
установить можно с помощью
sudo apt install python3.10-venv
Создать
Чтобы создать новое окружение выполните
python -m venv venv
Вместо venv можете придумать своё имя для окружения.
Обычно для мелких проектов никто не парится и просто в папке с проектом создает
окружение venv - у такого подхода есть как плюсы так и минусы.
Если системный Python вызвается через python3, как в Ubuntu то окружение создаётся так:
python3 -m venv venv
Если окружений будет несколько или нужно явно указать, например, разрядность Python - рекомендую указывать подсказки в названии.
Например, если в
Windows
я создаю окружение 32-х битным Python, в качестве названия выберу уже не venv а venv32
C:\Users\A\AppData\Local\Programs\Python\Python312-32\python.exe -m venv venv32
Если вы работаете в WSL то создавая окружение нужно использовать ту же версию Python, для котороый вы установили venv. Например
sudo python3.10 -m venv ubuntu_venv
Активировать
В Linux чтобы перейти в окружение выполните
source ./venv/bin/activate
В Windows PowerShell нужно выполнить
.\venv\Scripts\activate
Пример PowerShell скрипта, который проверяет активировано ли окружение из текущей директории и если нет то активирует его
If ($env:VIRTUAL_ENV -eq "${PWD}\venv") { Write-Host "venv is already activated" echo $env:VIRTUAL_ENV echo "${PWD}\venv" } Else { echo $env:VIRTUAL_ENV echo "${PWD}\venv" python -m venv venv .\venv\Scripts\activate }
После активации, то есть внутри окружения Python будет запускаться командой python, даже если при создании вы использовали python3 или явно указывали путь до файла.
Деактивировать
Чтобы выйти из виртуального окружения выполните
deactivate
Выбор версии Python для окружения
Чтобы создать окружение с определённой версией Python используйте команду с указанием версии.
Чтобы это сработало нужно иметь установленный Python данной версии
python3.9 -m venv your_env
Список установленных пакетов
Все пакеты которые вы установили в своём окружении можно изучить выполнив
python -m pip list
Формат вывода следующий:
Package Version -------------- ------- flake8 7.0.0 mccabe 0.7.0 pip 23.2.1 pycodestyle 2.11.1 pyflakes 3.2.0 robotframework 7.0 six 1.16.0 thrift 0.16.0
Этой командой удобно быстро изучать текущий состав пакетов. Для того чтобы сохранить те же самые данные в файл, который затем можно будет передавать другим разработчикам или пользователям вашего продукта применяется команда freeze и по негласной конвенции файл requirements.txt
requirements.txt
requirementx.txt
- это общепринятое название файла, в который сохраняют информацию об установленных пакетах.
Это те же самыые данные, которые показывает
list
но в формате, который понимает команда install.
Если вы используете какие-то дополнительные пакеты помимо стандартных и, например, хотите запустить тот же код на другой машине - стандартным решением будет
сохранить
данные о пакетах в
requirementx.txt
с помощью
freeze
, передать на другую машину и там восстановить всё с помощью
install -r
Сохранить requirements
python -m pip freeze > requirements.txt
Файл requirements.txt имеет формат
название_пакета==версия
Например
flake8==7.0.0 mccabe==0.7.0 pycodestyle==2.11.1 pyflakes==3.2.0 robotframework==7.0 six==1.16.0 thrift==0.16.0
Установить из requirements.txt
python -m pip install -r ./requirements.txt
В Windows
python -m pip install -r .\requirements.txt
requirements из GitHub
В файле requirements.txt можно использовать не только названия пакетов с их версиями, но и ссылки на GitHub репозитории, если эти репозитории оформлены в виде пакетов. Подробнее в статье «pip install из GitHub»
git+https://github.com/AndreiOlegovich/demo_py_package.git
Или с указанием коммита
git+https://github.com/AndreiOlegovich/demo_py_package.git@470a6844f71eb8872174d8fe28629337c3d69fab
Проверка активации
Название окружения может и не появиться в скобках в приглашении терминала.
Чтобы проверить активировалось ли виртуальное окружение или нет - можно выполнить следующие команды
В Linux
python >>> import sys >>> sys.prefix '/home/andrei/pytest/venv' >>> sys.base_prefix '/home/andrei/.pyenv/versions/3.9.5'
В Windows
python >>> import sys >>> sys.prefix 'C:\Users\Andrei\Documents\Projects\venv' >>> sys.base_prefix 'C:\Users\Andrei\AppData\Local\Programs\Python\Python310'
Если sys.prefix отличается от sys.base_prefix значит используется Python из виртуального окружения.
Если вы запускаете скрипт в Pycharm изучите вывод терминала
/home/andrei/pytest/venv/bin/python /home/andrei/pytest/main.py
Process finished with exit code 0
/home/andrei/pytest/venv/bin/python
- это путь до использованного Python
Если бы я запустил скрипт не из виртуального окружения вместо этого пути был бы путь
/usr/bin/python3.8
Виртуальное окружение | |
Anaconda | |
pyenv | |
virtualenv |