MyTetra Share
Делитесь знаниями!
Использование venv в Python3 в Linux и установка сторонних модулей (пакетов) через pip3
Время создания: 22.08.2025 23:37
Автор: Xintrea
Текстовые метки: linux, venv, python, python3, виртуальное окружение, pip3, установка, программ, пакетов, запуск, исполнение
Раздел: Компьютер - Программирование - Язык Python
Запись: xintrea/mytetra_syncro/master/base/1755895030swzsdn84a6/text.html на raw.github.com

Использование виртуальных окружений (VENV) и сторонних пакетов, установленных через pip3, - это базовая часть любой разработки в Python.


Когда могут понадобиться VENV? Практически всегда, если в разработке используются python-пакеты (модули), которых нет в репозитарии Linux, или если для запуска ПО, написанного на Python используются особые версии модулей, которые отличают от того, что есть в системе.


Для того, чтобы начать работу с VENV, надо в начале установить поддержку VENV, которая обычно находится в пакете python3-venv:



# apt-get install python3-venv



Как работать с VENV?


В начале нужно создать окружение VENV с заданным именем. Кстати, окружений VENV можно создавать сколько угодно. Далее надо переключиться на это окружение. После переключения, в Python-скриптах будут доступны базовые пакеты и модули (т. е. не все), находящиеся в обычной системе, плюс те пакеты (модули), которые устанавливаются специально в этом окружении. Вот и все.



Создание VENV с заданным именем


Команда создания VENV окружения с именем myenv выглядит так:



python3 -m venv myenv



Данная команда выполняется от текущего пользователя, под которым происходит разработка.


В результате будет создан каталог ~/.config/myenv, в котором будет находиться начальная структура файлов и подкаталогов, необходимая для работы этого окружения.



Переключение на VENV с заданным именем


После создания, необходимо переключиться на данное окружение. Иногда такое переключение еще называют активизацией. Происходит это следующей командой, все так же от того же обычного пользователя:



source ~/.config/myenv/bin/activate



Следует обратить внимание, что эту команду source с параметром нельзя помещать в отдельный bash-скрипт. Её именно надо выполнять вручную, и именно в той консоли, в которой происходит разработка. Связано это с особенностью команды source.



Команда source - это не отдельная программа, это именно встроенная в Bash команда. Команда source выполняет команды из файла, указанного в ее параметре, в текущей оболочке (shell), а не в дочернем процессе, как это происходило бы при обычном запуске bash-скрипта.



Если просто запустить скрипт ~/.config/myenv/bin/activate (да, это скрипт), то Bash создаст дочерний процесс, выполнит в нем команды, прописанные в ~/.config/myenv/bin/activate, и завершит процесс. Получается, что команды по переключению на VENV отработают в дочерном процессе, а потом этот процесс будет сразу удален при завершении работы скрипта. И никакого переключения не произойдет.


Если же поместить саму команду "source ~/.config/myenv/bin/activate" в отдельный bash-скрипт, то при старте этого скрипта все так же создастся дочерний процесс, в нем отработает команда "source ~/.config/myenv/bin/activate", потом процесс завершится, и в текущей консоли все так же не произойдет переключения на VENV.


Таким образом, команду "source ~/.config/myenv/bin/activate" надо выполнять напрямую, в текущей консоли.


Признаком того, что переключение успешно состоялось, будет изменение приглашения ввода. Вместо стандартного:



user@host:~$>



Появится приглашение:



(myenv) user@host:~$>



Как установить пакет (модуль) через pip3 в нужный VENV?


После перехода в заданный VENV, можно от обычного пользователя запускать установку нужных пакетов, содержащих модули Python. Для python3 это делается через утилиту pip3.


Возможно, в начале, от рута, надо будет установить саму устилиту pip3 из стандартного репозитария Linux:



# apt-get install python3-pip



Далее, от обычного пользователя, можно устанавливать пакеты в текущий активированный VENV. Например, установить пакет readchar можно командой:



pip3 install readchar



Все, дальше можно работать с Python-скриптами как обычно.



Как узнать список пакетов, который установлен внутри VENV?


Находясь в определенном VENV, можно дать команду:



pip3 list



В ответ будет выдан перечень пакетов, установленных внутри VENV:



Package Version

------------- ---------

certifi 2021.5.30

chardet 4.0.0

idna 2.10

pip 20.3.4

pkg-resources 0.0.0

requests 2.25.1

setuptools 44.1.1

urllib3 1.26.5



Как выйти из VENV?


В момент активации VENV путем выполнения скрипта активации через команду source, в текущую bash-сессию внедряется bash-функция deactivate, которая может вызываться из командной строки просто путем написания ее имени.


Так как функция существует в пределах той shell-сессии где был запущен VENV, то в любой директории можно выполнить команду:



deactivate



И произойдет выход из VENV.



Копирование перечня установленных пакетов из одной VENV в другую


Для копирования установленных пакетов в другую VENV-среду, можно использовать простую команду:



pip3 freeze > requirements.txt



Она создаст файл requirements.txt, в котором будет находится список всех установленных пакетов. Теперь можно выйти из старой VENV среды, перейти в другую виртуальную среду и импортировать пакеты следующей командой:



pip3 install -r requirements.txt



И тогда в новой среде будут установлены пакеты из списка, полученого в первой среде.


Так же в этом разделе:
 
MyTetra Share v.0.67
Яндекс индекс цитирования