Виртуальные среды (окружения) используются в Python 3 контроля версионности пакетов. Кроме контроля версий среды используют для использования разных интерпретаторов. Самих пакетов, которые создают виртуальные окружения много. В этой статье речь пойдет про venv, virtualenv и virtualenvwrapper.
Для чего нужно виртуальные среды?
При создании скрипта или программы вы часто используете сторонние модули (пакеты). Если в последующем потребуется перенос программы на другой компьютер, то вы можете столкнуться с двумя проблемами:
- Нужные пакеты отсутствуют на новом компьютере и придется проверять каждый файл программы для их поиска. Либо получить список установленных пакетов через "pip list" на старом компьютере, который выведет множество лишних модулей.
- Даже если количество пакетов или файлов программ маленькое, или вы его создали отдельно, то вы все равно можете столкнуться с проблемами в версиях. Пакеты могли быть обновлены, а методы и классы изменены.
Использование виртуальных сред избавляет вас от этих проблем. В таком виртуальной среде находится свой интерпретатор, свой pip и все пакеты относятся только к нему. Так же, весь проект, можно перенести как папку на другой компьютер без ошибок.
Кроме этого вы можете запускать разные версии Python в разных виртуальных средах, что сильно упрощает работу.
Установка и создания окружения с virtualenv
Самый популярный пакет, который используется для создания виртуальных сред в Python, это virtualenv. Для его установки на Windows выполните:
pip install virtualenv
Для установки на Linux системах, для Python 3, понадобится выполнить такую команду:
sudo pip3 install virtualenv
Если вы не будете использовать sudo, то в зависимости от версии ОС у вас появятся разные ошибки. В CentOS установка не выполнится вовсе, а в Ubuntu не будет добавлен путь в переменную окружения:
- PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.6'
- Command 'virtualenv' not found, but can be installed with: sudo apt install virtualenv
Далее, вне зависимости от того используете ли вы Linux или Windows, вы можете выполнить команду получения справки:
virtualenv --help
Я использую Python 3.6, и так я создам окружение в папке projectname/venv:
virtualenv -p python3.6 project/venv
Способ выше устанавливает окружение относительно текущего пути. Если нужно установить на другом диске или каталоге, то можно использовать абсолютный путь. Так же не обязательно указывать параметр "-p" если вы используете одну версию Python. Вариант как это может быть сделано на Windows:
virtualenv D:\project\venv
Само расположение виртуального окружения рекомендуется создавать в одной папке вместе разрабатываемым приложением. Такую структуру будет легче сопровождать. Я обычно придерживаюсь такой структуры:
-projectname # Каталог проекта
--venv # Окружение
--app # Каталог с приложением
Активация и выход из окружения
Для того что бы виртуальное окружения начало работать его нужно активировать. В разных ОС это делается по-разному.
В случаях с Linux указываем полный путь до venv/bin/activate:
source project/venv/bin/activate
Для активации в Windows, в папке venv\Scripts есть несколько файлов:
- activate.ps1 - для активации через Powershell;
- activate.bat - для активации через CMD.
Для активации просто укажите полный путь до файла. Например:
D:\projectname\venv\Scripts\activate.ps1
О том что вы находитесь в виртуальном окружении свидетельствуют следующие надписи:
Вы так же можете сравнить количество установленных пакетов внутри виртуального окружения с тем, что установлено вне:
pip list
Теперь вы можете устанавливать пакеты, которые будут работать только в этой среде.
Для выхода из окружения, за исключением запуска с помощью CMD, используйте команду:
deactivate
Для CMD нужно указать путь до файла "venv\Scripts\deactivate.bat".
Управление средами через virtualenvwrapper
Если вы создаете множество виртуальных сред, например для тестирования в разных версиях Python, вы можете использовать virtualenvwrapper. Этот пакет представляет собой надстройку для virtualenv для более удобной работы и устанавливается отдельно.
Благодаря этому пакету мы сможем запускать ваши окружения так:
workon project_name
# вместо
source project_name/venv/bin/activate
Для Windows нужно установить следующий пакет:
pip install virtualenvwrapper-win
Для Linux нужно так же использовать sudo:
sudo pip3 install virtualenvwrapper
Настройки для Linux
Virtualenvwrapper хранит все окружения в одном месте. Это место определяется через переменную WORKON_HOME в Linux и по умолчанию равно директории '/home/пользователь/.virtualenvs'. Если вы хотите изменить это расположение - выполните команду экспорта с нужным путем:
export WORKON_HOME = /var/envs/
# Создание директории
source ~/.bashrc
mkdir -p $WORKON_HOME
Следующая команда добавит скрипты в домашний каталог для удобной работы:
source /usr/local/bin/virtualenvwrapper.sh
# Если путь отличается, то файл virtualenvwrapper.sh можно найти так
which virtualenvwrapper.sh
При выполнении предыдущей команды у меня появилась ошибка:
virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader
Она исправилась добавлением переменной в env с путем до нужного интерпретатора:
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
Настройки для Windows
Все виртуальные среды, которые будут созданы, по умолчанию будут располагаться по пути "C:\Users\%USERNAME%\Envs". Если вам нужно изменить расположение, то создайте переменную WORKON_HOME с нужной директорией:
Важный момент, в случае с Windows, команды virtualenvwrapper не будут выполняться Powershell. Команды работают только через CMD.
Основные команды
Далее мы можем использовать следующие команды (основные):
- mkvirtualenv - создание окружения;
- lsvirtualenv - отображение списка окружений;
- rmvirtualenv - удаление;
- workon - переключение между виртуальными средами;
- deactivate - выход из текущего окружения.
Так мы создадим виртуальную среду:
mkvirtualenv project_name
Так выйдем из созданной среды:
deactivate
Активация окружения:
workon django3.0
Если нужно использовать другую версию Python:
mkvirtualenv -p python2.7 project_name/venv
Получение справки:
mkvirtualenv -h
Создание виртуальных сред со встроенным пакетом Python venv
Ранее, до версии Python >= 3.6 базовая установка интерпретатора шла вместе с пакетом pyenv, но на данный момент он считается устаревшим и более не поддерживается. На его смену пришел venv. В некоторых версиях ОС (Ubuntu/Debian) может потребоваться его отдельная установка:
sudo apt install python3-venv
Проверить, то что пакет venv установлен, можно так:
python -m venv
# или
python3 -m venv
Следующая команда создаст виртуальную среду:
python -m venv C:\project_name\project_venv
# или
python3 -m venv /var/project_name/project_venv
Выбранная версия Python и стандартные библиотеки будут скопированы в указанную папку.
Активация окружения выполняется следующим образом:
# CMD
C:\project_name\project_venv\Scripts\activate.bat
# Powershell
C:\project_name\project_venv\Scripts\Activate.ps1
# Bash
project_name/project_venv/bin/activate
Для выхода из окружения:
# CMD
C:\project_name\project_venv\Scripts\deactivate.bat
# Powershell и bash
deactivate
Создание виртуального окружения в Pycharm
В некоторых IDE, например Pycharm, консоль встроенная и по умолчанию у вас будет запускаться интерпретатор выбранный в настройках. В Pycharm вы можете создать или изменить проект привязав его к определенному интерпретатору.
Виртуальную среду можно создать при создании нового проекта. Для этого нужно зайти по следующему пути:
В новом окне выбрать название проекта, место для копирования, интерпретатор и нажать кнопку создания окружения:
Для настройки окружения для старых проектов нужно зайти в настройки:
Во вкладе "Python Interpreter" будет выбор из существующих интерпретаторов (1). Либо можно создать новый (2):
Создание списка установленных пакетов Requirements.txt
Используя виртуальные окружения можно легко создавать файл, в котором будут собраны все названия и версии пакетов для определенного проекта. Этот подход используется для удобства работы, так как одной программой мы сразу установим нужные пакеты.
Так мы получим список пакетов, установленных в виртуальном окружении, в формате читаемом pip:
pip freeze
Следующим способом мы экспортируем этот список в файл Requirements.txt (способ подходит для Bash/CMD/Powershell):
pip freeze > Requirements.txt
На другом компьютере/среде мы можем этот список быстро проверить и установить отсутствующие пакеты следующей командой:
pip install -r Requirements.txt
...
Подписывайтесь на наш Telegram канал
Теги: #python #virtualenv #venv