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 будет создан файл packages.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