将 pipenv 用于 运行 jenkins 上的单元测试需要太长时间

use pipenv for running unittest on jenkins takes too long

我们从 pip 迁移到了 pipenv。

我觉得pipenv很棒,但是运行遇到了问题。

我们 运行 我们使用 git webhook 对 jenkins 的每次推送进行单元测试。使用 pip 时,我们有一个虚拟环境,我们会在 运行 测试之前激活它并安装我们的 requiremnets.txt 文件。

这非常快,pip 会 运行 通过已经满足的要求,并且只在添加一个依赖项时安装依赖项。

使用 Pipenv,我在回购的根目录中有 Pipfile 和 Pipfile.lock,并且 运行ning pipenv install 似乎每次都在重新创建环境,并且需要很长时间了。

这可能会破坏我们的阅读交易。

是否有任何解决方法可以加快使用 pipenv 的速度?

之前的 shell 脚本(在 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

听起来你的旧设置保留了虚拟环境和之前 pip 跨构建安装的包,而你的新 pipenv 设置没有。

默认情况下,pipenv 在构建区域之外创建一个虚拟环境,并使用构建区域的完整路径的哈希值作为名称的一部分。要么 超出构建区域 目录未在构建中保留,要么每次构建 运行 时构建区域目录路径都不同(每次都会导致新的虚拟环境时间)。

我建议在运行宁pipenv之前设置PIPENV_VENV_IN_PROJECT=1。使用此设置,您的构建将更像旧构建,在构建目录树中使用 virtualenv。像这样:

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

(另外,不需要 运行 pipenv installpipenv install --dev 将安装主包和仅开发包。)