использование pipenv для запуска unittest на jenkins занимает слишком много времени

#jenkins #pip #pipenv

#дженкинс #pip #pipenv

Вопрос:

Мы перешли с pip на pipenv.

Я думаю, что pipenv великолепен, но столкнулся с проблемой.

Мы запускаем наши unittests при каждом нажатии, используя git webhook для jenkins. При использовании pip у нас была виртуальная среда, и мы активировали ее и устанавливали наш requiremnets.txt файл перед запуском тестов.

Это было довольно быстро, pip выполнялся бы по сетям требований, которые уже были выполнены, и устанавливал зависимость только при ее добавлении.

С Pipenv у меня есть файл Pipfile и файл Pipfile.блокировка в корне репозитория, и запуск pipenv install кажется, что он каждый раз воссоздает среду, и занимает очень много времени.

Для нас это может стать препятствием для чтения.

Есть ли какая-нибудь работа вслух, чтобы я мог ускорить работу с pipenv?

Предыдущий сценарий оболочки (в задании jenkins) был чем-то вроде:

 eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
pyenv activate romee

pip install -r requirements.txt
pip install -r requirements-dev.txt

python tests.py
  

С pipenv:

 pipenv install
pipenv install --dev
pipenv run python run_tests.py
  

Комментарии:

1. «установка pipenv выглядит так, будто она каждый раз воссоздает среду» — это очень странно. Можете ли вы запустить pipenv install --verbose и показать, что есть в журнале?

2. Результат огромен! что-нибудь конкретное?

Ответ №1:

Похоже, что ваша старая установка сохранила виртуальную среду и ранее pip установленные пакеты во всех сборках, а ваша новая pipenv установка — нет.

По умолчанию pipenv создается виртуальная среда за пределами области сборки и используется хэш полного пути к области сборки как часть имени. Либо этот каталог вне области сборки не сохраняется во всех сборках, либо путь к каталогу области сборки отличается при каждом запуске сборки (каждый раз приводя к новой виртуальной среде).

Я рекомендую установить PIPENV_VENV_IN_PROJECT=1 перед запуском pipenv . С этим параметром ваша сборка будет больше похожа на старую сборку, с virtualenv в дереве каталогов сборки. Вот так:

 export PIPENV_VENV_IN_PROJECT=1
pipenv install --dev
pipenv run python run_tests.py
  

(Кроме того, нет необходимости запускать pipenv install , pipenv install --dev будут установлены основные пакеты вместе с пакетами только для разработчиков.)