- Модуль venv в Python3, создание виртуальных сред.
- Создание виртуальной среды.
- Примеры:
- Использование виртуальных сред venv и virtualenv для создания окружения Python
- Для чего нужно виртуальные среды?
- Установка и создания окружения с virtualenv
- Активация и выход из окружения
- Управление средами через virtualenvwrapper
- Настройки для Linux
- Настройки для Windows
- Основные команды
- Создание виртуальных сред со встроенным пакетом Python venv
- Создание виртуального окружения в Pycharm
- Создание списка установленных пакетов Requirements.txt
Модуль venv в Python3, создание виртуальных сред.
Модуль venv обеспечивает поддержку создания облегченных «виртуальных сред». Каждая виртуальная среда имеет свой собственный двоичный файл Python и может иметь собственный независимый набор установленных пакетов Python в своих каталогах.
Если в вашей операционной системе по умолчанию используется Python 3 и не нравиться функциональность встроенного модуля venv , то модуль virtualenv можно установить как скомпилированный пакет операционной системы.
Виртуальная среда — это среда Python, в которой установленный в ней интерпретатор Python, библиотеки и скрипты изолированы от других виртуальных сред и изолированы от любых библиотек, установленных в Python как часть операционной системы.
Обычные инструменты установки, такие как setuptools и pip работают в виртуальных средах как и ожидается. Другими словами, когда виртуальная среда активна, они устанавливают пакеты Python в виртуальную среду без необходимости явно указывать это.
Когда виртуальная среда активна, т. е. работает интерпретатор Python виртуальной среды, атрибуты sys.prefix и sys.exec_prefix указывают на базовый каталог виртуальной среды, тогда как sys.base_prefix и sys.base_exec_prefix останутся указывать на базовую установку Python, ту, из которой была создана виртуальная среда. Если виртуальная среда не активна, то sys.prefix совпадает с sys.base_prefix , а sys.exec_prefix будет совпадать с sys.base_exec_prefix , все они указывают на установку Python не в виртуальной среде.
Когда виртуальная среда активна, любые параметры, которые изменяют путь установки, будут игнорироваться во всех файлах конфигурации distutils , чтобы предотвратить случайную установку проектов вне виртуальной среды.
Работая в командной оболочке, пользователи могут активизировать виртуальную среду, запустив сценарий активации в каталоге исполняемых файлов виртуальной среды source /bin/activate , который добавляет каталог виртуальной среды для исполняемых файлов в переменную окружения PATH для работающей оболочки.
Создание виртуальной среды.
Создание виртуальной среды выполняется с помощью команды venv :
Выполнение этой команды создает целевой каталог environment , создавая все не существующие родительские каталоги и помещает в него файл pyvenv.cfg с домашним ключом, указывающим на установку Python, из которой была запущена эта команда. Она также создает подкаталог bin в Unix или Scripts в Windows, содержащий копию/символическую ссылку двоичных файлов Python в зависимости от платформы или аргументов, используемых во время создания среды. Вышеуказанная команда также создает изначально пустой подкаталог lib/pythonX.Y/site-packages в Unix, в Windows это Lib\\site-packages . Если указан существующий каталог виртуальной среды, то он будет использован повторно.
В Windows вызовите команду venv следующим образом:
В качестве альтернативы, если настроены переменные PATH и PATHEXT для установки Python:
Для venv может быть задано несколько путей, и в этом случае будет создана идентичная виртуальная среда в соответствии с заданными параметрами для каждого указанного пути.
После создания виртуальной среды ее можно «активировать» с помощью сценария, расположенном каталоге виртуальной среды. Вызов сценария зависит от платформы:
Платформа | Оболочка | Команда активации виртуальной среды |
POSIX | bash/zsh | $ source venv/bin/activate |
fish | $ . venv/bin/activate.fish | |
csh/tcsh | $ source venv/bin/activate.csh | |
PowerShell Core | $ venv/bin/Activate.ps1 | |
Windows | cmd.exe | C:> venv\Scripts\activate.bat |
PowerShell | PS C:> venv\Scripts\Activate.ps1 |
Примечание к таблице: venv должен быть заменен путем к каталогу, содержащему виртуальную среду:
Не нужно специально активировать среду если сценарий запускается с указанием полного пути до интерпретатора Python, установленного в виртуальную среду. Активация просто добавляет каталог виртуальной среды к пути интерпретатора Python тем самым давая возможность запускать сценарии не используя полный путь.
Вы можете «деактивировать» виртуальную среду, набрав команду deactivate в своей оболочке. Точный механизм зависит от платформы и является внутренней деталью реализации. Обычно используется скрипт или функция оболочки.
Примеры:
Установка виртуальной среды в директорию env :
Активация виртуальной среды env :
Установка пакетов в виртуальную среду env :
Выполнение сценариев в виртуальной среде env :
Деактивация виртуальной среды:
Не нужно специально активировать среду если сценарий запускается с указанием полного пути до интерпретатора Python:
Если команда python3 -m venv запускается с опцией -h, то можно увидеть доступные опции:
- ENV_DIR — Каталог для создания виртуальной среды.
- -h , —help — показать справочное сообщение и выйти,
- —system-site-packages — предоставляет виртуальной среде доступ к системным пакетам site-packages ,
- —symlinks — при установке виртуальной среды создает символические ссылки вместо копирования файлов,
- —copies — при установке виртуальной среды копирует файлы вместо создания символических ссылок,
- —clear — перед созданием виртуальной среды удаляет содержимое каталога, если он уже существует,
- —upgrade — Обновите каталог виртуальной среды, чтобы использовать установленную версию Python,
- —without-pip — пропускает установку или обновление pip в виртуальной среде (pip загружается по умолчанию),
- —prompt PROMPT — предоставляет альтернативный префикс приглашения для этой среды.
Примечания:
- Хотя в Windows поддерживаются символические ссылки, они не рекомендуются. Особо следует отметить, что двойной щелчок по python.exe в проводнике файлов разрешит символическую ссылку и проигнорирует виртуальную среду.
- В Microsoft Windows может потребоваться включить сценарий Activate.ps1 , установив политику выполнения для пользователя. Вы можете сделать это, введя следующую команду PowerShell: PS C: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Созданный файл pyvenv.cfg также содержит ключ include-system-site-packages , для которого установлено значение true , если venv запускается с параметром —system-site-packages , в противном случае значение будет false .
Если не указана опция —without-pip , то будет вызываться модуль ensurepip для начальной загрузки pip в виртуальную среду.
Использование виртуальных сред venv и virtualenv для создания окружения Python
Виртуальные среды (окружения) используются в Python 3 контроля версионности пакетов. Кроме контроля версий среды используют для использования разных интерпретаторов. Самих пакетов, которые создают виртуальные окружения много. В этой статье речь пойдет про venv, virtualenv и virtualenvwrapper.
Навигация по посту
Для чего нужно виртуальные среды?
При создании скрипта или программы вы часто используете сторонние модули (пакеты). Если в последующем потребуется перенос программы на другой компьютер, то вы можете столкнуться с двумя проблемами:
- Нужные пакеты отсутствуют на новом компьютере и придется проверять каждый файл программы для их поиска. Либо получить список установленных пакетов через «pip list» на старом компьютере, который выведет множество лишних модулей.
- Даже если количество пакетов или файлов программ маленькое, или вы его создали отдельно, то вы все равно можете столкнуться с проблемами в версиях. Пакеты могли быть обновлены, а методы и классы изменены.
Использование виртуальных сред избавляет вас от этих проблем. В таком виртуальной среде находится свой интерпретатор, свой pip и все пакеты относятся только к нему. Так же, весь проект, можно перенести как папку на другой компьютер без ошибок.
Кроме этого вы можете запускать разные версии Python в разных виртуальных средах, что сильно упрощает работу.
Установка и создания окружения с virtualenv
Самый популярный пакет, который используется для создания виртуальных сред в Python, это virtualenv. Для его установки на Windows выполните:
Для установки на Linux системах, для Python 3, понадобится выполнить такую команду:
Если вы не будете использовать 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, вы можете выполнить команду получения справки:
Я использую Python 3.6, и так я создам окружение в папке projectname/venv:
Способ выше устанавливает окружение относительно текущего пути. Если нужно установить на другом диске или каталоге, то можно использовать абсолютный путь. Так же не обязательно указывать параметр «-p» если вы используете одну версию Python. Вариант как это может быть сделано на Windows:
Само расположение виртуального окружения рекомендуется создавать в одной папке вместе разрабатываемым приложением. Такую структуру будет легче сопровождать. Я обычно придерживаюсь такой структуры:
Активация и выход из окружения
Для того что бы виртуальное окружения начало работать его нужно активировать. В разных ОС это делается по-разному.
В случаях с Linux указываем полный путь до venv/bin/activate:
Для активации в Windows, в папке venv\Scripts есть несколько файлов:
- activate.ps1 — для активации через Powershell;
- activate.bat — для активации через CMD.
Для активации просто укажите полный путь до файла. Например:
О том что вы находитесь в виртуальном окружении свидетельствуют следующие надписи:
Вы так же можете сравнить количество установленных пакетов внутри виртуального окружения с тем, что установлено вне:
Теперь вы можете устанавливать пакеты, которые будут работать только в этой среде.
Для выхода из окружения, за исключением запуска с помощью CMD, используйте команду:
Для CMD нужно указать путь до файла «venv\Scripts\deactivate.bat».
Управление средами через virtualenvwrapper
Если вы создаете множество виртуальных сред, например для тестирования в разных версиях Python, вы можете использовать virtualenvwrapper. Этот пакет представляет собой надстройку для virtualenv для более удобной работы и устанавливается отдельно.
Благодаря этому пакету мы сможем запускать ваши окружения так:
Для Windows нужно установить следующий пакет:
Для Linux нужно так же использовать sudo:
Настройки для Linux
Virtualenvwrapper хранит все окружения в одном месте. Это место определяется через переменную WORKON_HOME в Linux и по умолчанию равно директории ‘/home/пользователь/.virtualenvs’. Если вы хотите изменить это расположение — выполните команду экспорта с нужным путем:
Следующая команда добавит скрипты в домашний каталог для удобной работы:
При выполнении предыдущей команды у меня появилась ошибка:
virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader
Она исправилась добавлением переменной в env с путем до нужного интерпретатора:
Настройки для Windows
Все виртуальные среды, которые будут созданы, по умолчанию будут располагаться по пути «C:\Users\%USERNAME%\Envs». Если вам нужно изменить расположение, то создайте переменную WORKON_HOME с нужной директорией:
Важный момент, в случае с Windows, команды virtualenvwrapper не будут выполняться Powershell. Команды работают только через CMD.
Основные команды
Далее мы можем использовать следующие команды (основные):
- mkvirtualenv — создание окружения;
- lsvirtualenv — отображение списка окружений;
- rmvirtualenv — удаление;
- workon — переключение между виртуальными средами;
- deactivate — выход из текущего окружения.
Так мы создадим виртуальную среду:
Так выйдем из созданной среды:
Если нужно использовать другую версию Python:
Создание виртуальных сред со встроенным пакетом Python venv
Ранее, до версии Python >= 3.6 базовая установка интерпретатора шла вместе с пакетом pyenv, но на данный момент он считается устаревшим и более не поддерживается. На его смену пришел venv. В некоторых версиях ОС (Ubuntu/Debian) может потребоваться его отдельная установка:
Проверить, то что пакет venv установлен, можно так:
Следующая команда создаст виртуальную среду:
Выбранная версия Python и стандартные библиотеки будут скопированы в указанную папку.
Активация окружения выполняется следующим образом:
Для выхода из окружения:
Создание виртуального окружения в Pycharm
В некоторых IDE, например Pycharm, консоль встроенная и по умолчанию у вас будет запускаться интерпретатор выбранный в настройках. В Pycharm вы можете создать или изменить проект привязав его к определенному интерпретатору.
Виртуальную среду можно создать при создании нового проекта. Для этого нужно зайти по следующему пути:
В новом окне выбрать название проекта, место для копирования, интерпретатор и нажать кнопку создания окружения:
Для настройки окружения для старых проектов нужно зайти в настройки:
Во вкладе «Python Interpreter» будет выбор из существующих интерпретаторов (1). Либо можно создать новый (2):
Создание списка установленных пакетов Requirements.txt
Используя виртуальные окружения можно легко создавать файл, в котором будут собраны все названия и версии пакетов для определенного проекта. Этот подход используется для удобства работы, так как одной программой мы сразу установим нужные пакеты.
Так мы получим список пакетов, установленных в виртуальном окружении, в формате читаемом pip:
Следующим способом мы экспортируем этот список в файл Requirements.txt (способ подходит для Bash/CMD/Powershell):
На другом компьютере/среде мы можем этот список быстро проверить и установить отсутствующие пакеты следующей командой: