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