pip и venv - установщик пакетов и виртуальное окружение в Python

Пакет pip, начиная с Python 3.4, входит в состав установочного пакета языка и не требует отдельной установки.

Однако в дистрибутивах Linux данного пакета по-умолчанию может не быть. В Ubuntu установка выполняется следующей командой:

sudo apt install python3-pip

pip представляет собой систему управления пакетами. По-умолчанию пакеты берутся из PyPI (https://pypi.org) - Python Package Index. Однако с помощью pip можно устанавливать из любых источников, в том числе с локального компьютера. Документация по pip: https://pip.pypa.io.

Система управления пакетами pip позволяет устанавливать, обновлять и удалять пакеты Python. Установка происходит вместе с зависимостями. Можно устанавливать определенные версии пакетов или самую свежую из заданного диапазона.

Просмотр версий Python и pip:

pl@desk:~$ python3 --version
Python 3.10.6
pl@desk:~$ python3 -m pip --version
pip 23.2.1 from /home/.../pip (python 3.10)
pl@desk:~$ pip3 --version
pip 23.2.1 from /home/.../pip (python 3.10)

Общая команда установки пакета:

user@comp:~$ python3 -m pip install имя_пакета

Общая команда установки определнной версии:

user@comp:~$ python3 -m pip install 'имя_пакета==2.5.0'

При разработке и работе разных python-приложений на одном компьютере им могут требоваться разные дополнительные пакеты. Кроме того различие может быть в версиях какого-то модуля. В такоих случаях удобнее или даже необходимо под каждый проект создавать собственное изолированное python-окружение.

Оно является виртуальным, так как создается как бы поверх базовой установки Python и изолируется от части ее пакетов только при необходимости и таким образом, что используются те, которые явно установлены в виртуальной среде.

Кроме модуля venv, входящего в стандартную библиотеку Python, для этих целей есть и другие более высокоуровневые инструменты.

Создание виртуальной среды в каталоге программы:

pl@desk:~/pytest$ python3 -m venv env

env - произвольное имя создаваемого подкаталога, в котором будут созданы файлы виртуальной среды. Принято его называть venv или .venv.

Активация виртуального окружения:

pl@desk:~/pytest$ source env/bin/activate
(env) pl@desk:~/pytest$ 

Проверка установленных пакетов внутри виртуальной среды:

(env) pl@desk:~/pytest$ pip3 list
Package    Version
---------- -------
pip        22.0.2
setuptools 59.6.0

В примере выше ничего дополнительно не было установлено.

Пример установки модуля requests:

(env) pl@desk:~/pytest$ pip3 install requests
Collecting requests
...
(env) pl@desk:~/pytest$ pip3 list
Package            Version
------------------ ---------
certifi            2023.7.22
charset-normalizer 3.2.0
idna               3.4
pip                22.0.2
requests           2.31.0
setuptools         59.6.0
urllib3            2.0.5

Выход из виртуального окружения:

(env) pl@desk:~/pytest$ deactivate
pl@desk:~/pytest$

Перенос установленных пакетов в другую среду (виртуальная оболочка должна быть активирована). Сначала экспортируем имена пакетов:

(env) pl@desk:~/pytest$ python3 -m pip freeze > packages.txt

В данном случае в каталоге pytest будет создан файл packeges.txt со следующим содержимым:

certifi==2023.7.22
charset-normalizer==3.2.0
idna==3.4
requests==2.31.0
urllib3==2.0.5

Создаем и переходим в другой каталог, переносим сюда файл (или указываем путь до него):

(env) pl@desk:~/pytest$ mkdir ../pytest2
(env) pl@desk:~/pytest$ cd ../pytest2/
(env) pl@desk:~/pytest2$ mv ../pytest/packages.txt ./
(env) pl@desk:~/pytest2$ ls
packages.txt

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

(env) pl@desk:~/pytest2$ deactivate
pl@desk:~/pytest2$ python3 -m venv env2
pl@desk:~/pytest2$ source env2/bin/activate
(env2) pl@desk:~/pytest2$ 

Установка пакетов:

(env2) pl@desk:~/pytest2$ pip3 install -r packages.txt
Collecting certifi==2023.7.22
...

Проверка:

(env2) pl@desk:~/pytest2$ pip3 list
Package            Version
------------------ ---------
certifi            2023.7.22
charset-normalizer 3.2.0
idna               3.4
pip                22.0.2
requests           2.31.0
setuptools         59.6.0
urllib3            2.0.5