#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
будут установлены основные пакеты вместе с пакетами только для разработчиков.)