pip — инструмент для установки и управления зависимостями в проектах Python. Аналог aptitude в Debian.
env — инструмент для создания и управления виртуальным окружением в проектах Python.
pipenv — надстройка над pip. Умеет автоматически находить интерпретатор Python нужной версии, запускать вспомогательные скрипты для разработки, загружать переменные окружения из файла .env, проверять зависимости на наличие известных уязвимостей. Не путать с Pyenv.
Перед установкой убедиться в том, что всё это в системе ещё не было установлено. Нестандартный подход:
pip uninstall pipenv
pip3 uninstall pipenv
Повторять до тех пор, пока ответ не станет WARNING: Skipping pipenv as it is not installed. Не установлено, поэтому и нечего удалять. Гуд.
Установка
Большинство ставят это всё через sudo — на всю систему сразу, и это ок, если это твой ноутбук и очень хочется стать программистом, но программирование это не твоё. После принудительного sudo исполняемый файл pipenv будет доступен по общему для всех адресу /usr/local/bin/pipenv
.
Но глобальная установка pipenv может бомбануть в будущем, поскольку она перезаписывает глобальную/управляемую системой установку pip, что иногда приводит к ВНЕЗАПНЫМ ошибкам импорта при попытке запустить pip. Пип-па-бум-пум, хэппи дебаггинг.
Поэтому каждому пользователю в отдельности рекомендуется ставить pipenv для каждого пользователя отдельно.
pip3 install --user pipenv
Так а pip или pip3?
В целом без разницы, но это встроенная возможность пипать разные версии Python, которые установлены в системе. Глобально проверяется просто:
pip --version
Пример ответа: pip 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9). Стоит распоследний ’Python 3.9’, ну и вот, все обращения будут идти к нему.
Но если понадобится использовать определённую версию Python в проекте (3.7), то команда может выглядеть как ’pip3.7’.
После установки в консоли выводится сообщение о месте установки (вроде /home/astenix/.local/lib/python3.9/site-packages) и рекомендация прописать ~/.local/bin в PATH:
WARNING: The scripts pipenv and pipenv-resolver are installed in '/home/astenix/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Пока эта рекомендация не будет выполнена, ответ на любой вызов pipenv будет таким: «bash: pipenv: команда не найдена».
Add the path to PATH
Посмотрим, где у юзера Python зимует:
python -m site --user-base
Вывод, например: /home/astenix/.local Внутри найдется каталог bin с рядом файлов. Он и нужен.
Добавить в последних строках файла ~/.bashrc это:
export PATH="$PATH:/home/astenix/.local/bin"
И тут уже или логаут/логинг, или выполнить
source ~/.bashrc
Проверка установки:
pipenv --version
Ожидаемый ответ вроде pipenv, version 2021.5.29
Использование
В каталоге проекта Python запустить pipenv install (это команда для создания виртуального окружения) с указанием версии пайтона (можно глобально, можно категорически точно с указанием источника той или иной версии).
pipenv --python python3 install
К зависимостям в проекте надо относиться максимально точно. Например, с гита снят проект, в котором работал с python 3.8, а у меня 3.9. В выводе pipenv будет об этом отдельно сказано:
Warning: Your Pipfile requires python_version 3.8, but you are using 3.9.2 (/home/a/.local/share/v/t/bin/python).
$ pipenv –rm and rebuilding the virtual environment may resolve the issue.
$ pipenv check will surely fail.
(вкратце) Создание/запуск/отключение виртуальной среды
Виртуальная среда Python представляет собой автономное дерево каталогов, которое включает установку Python и ряд дополнительных пакетов. Это позволяет вам устанавливать модули Python в изолированном месте только для конкретного проекта, а не глобально.
Создадим новый проект в Python 3.8 с именем my_app внутри домашнего каталога пользователя (отсюда).
Сначала создайте каталог проекта и гоу туда:
mkdir ~/my_app && cd ~/my_app
Внутри корня проекта создать виртуальную среду с именем ’my_app_venv’:
python3.8 -m venv my_app_venv
Активировать её:
source my_app_venv/bin/activate
После активации приглашение оболочки будет иметь префикс с именем среды. Начиная с Python 3.4, при создании pip виртуальных сред менеджер пакетов для Python устанавливается по умолчанию.
В виртуальной среде вы можете использовать pip вместо pip3.8 и python вместо python3.8:
python -v
Вариант ответа: Python 3.8.1
Выход из оболочки виртуалки:
deactivate
Отдельные примеры управления pipenv: