pipenv install

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:

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s