You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins中使用pipenv创建Virtualenv失败问题求助

问题根因

该问题和Jenkins插件无关,也不是Python 3.8版本兼容导致,核心是pipenv版本调用冲突:

  • Ubuntu 20.04系统通过apt源预装了老旧的pipenv==11.9.0,可执行文件路径为/usr/bin/pipenv,在系统PATH中优先级很高
  • 你执行pip3 install pipenv==2022.5.2时,默认将新版本安装到用户级目录,对应可执行文件在~/.local/bin/路径,优先级低于系统路径下的旧版本
  • 后续执行pipenv install时,实际调用的是系统自带的11.9.0旧版本,新旧版本文件混杂,才会触发找不到pipenv.pew模块、__str__ returned non-string的报错。报错栈中load_entry_point('pipenv==11.9.0', 'console_scripts', 'pipenv')()的记录可以直接实锤这个问题。
解决方案

任选以下一种方案修改即可:

  • 方案1:通过python模块方式显式调用安装的新版本pipenv,完全避开路径冲突
    修改Jenkinsfile中依赖安装阶段的代码,将所有直接调用pipenv的命令替换为python3 -m pipenv,保证调用的是你刚通过pip3安装的2022.5.2版本:
stage('Install dependencies') {
    steps {
            echo 'Install dependencies'
            sh 'python3 --version'
            sh 'pip3 install pipenv==2022.5.2'
            // 显式通过python模块调用,避免命中系统旧版本
            sh 'python3 -m pipenv --rm || exit 0'
            sh 'python3 -m pipenv install'
    }
}
  • 方案2:提前卸载系统自带的旧版本pipenv,从根源消除冲突
    在安装pipenv的步骤前增加卸载系统旧版本的命令,安装完成后增加版本校验步骤确认调用正确:
stage('Install dependencies') {
    steps {
            echo 'Install dependencies'
            sh 'python3 --version'
            // 卸载系统预装的老旧pipenv
            sh 'sudo apt remove -y pipenv || exit 0'
            sh 'pip3 install pipenv==2022.5.2'
            // 校验版本,确认输出为pipenv, version 2022.5.2
            sh 'pipenv --version'
            sh 'pipenv --rm || exit 0'
            sh 'pipenv install'
    }
}
  • 方案3:将指定版本的pipenv安装到系统级路径,覆盖旧版本优先级
    将pipenv安装命令改为系统级安装,新版本会部署到/usr/local/bin/路径,优先级高于/usr/bin下的旧版本,调用时会自动命中新版本:
    sh 'sudo pip3 install pipenv==2022.5.2'
    

注意:Ubuntu 20.04 apt源内置的pipenv 11.9.0是2018年发布的老旧版本,本身和Python3.8、新版Pipfile规范存在大量兼容问题,无论是否使用Jenkins都不建议直接使用该版本。

内容的提问来源于stack exchange,提问作者Smaillns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 23:13:00