使用pipenv install --dev时如何避免忽略指定的包版本?
Pipenv安装开发依赖时意外升级Django?这是旧版本的已知Bug
嘿,我之前也碰到过类似的情况,这不是你的操作错误,而是你使用的Pipenv 9.0.3版本存在的一个已知缺陷。
为什么会出现这个问题?
在Pipenv早期版本(比如你用的9.0.3)里,处理主依赖和开发依赖的版本约束逻辑有漏洞:当执行pipenv install --dev时,它没有正确合并主依赖里<2.0,>=1.11的严格约束,而是重新解析所有依赖,默认选择满足所有宽松约束的最新版本。虽然django-debug-toolbar确实支持Django 1.11+,但它也兼容2.0版本,所以Pipenv直接拉取了当时Django的最新版2.0.1,完全忽略了你主依赖里明确的<2.0限制。
解决方案
升级Pipenv到稳定版就能解决,这个问题在后续版本中已经被修复:
- 先升级Pipenv本身:
pip install --upgrade pipenv - 删除现有的
Pipfile.lock(旧锁文件已经记录了错误的版本信息),然后重新执行:
新版本的Pipenv会正确合并主依赖与开发依赖的版本约束,确保安装的Django版本同时满足pipenv install --dev<2.0,>=1.11,并且安装与之兼容的django-debug-toolbar。
验证步骤
升级后可以再测试一遍流程:
- 执行
pipenv install,会安装符合主依赖要求的Django 1.x版本 - 执行
pipenv install --dev,只会新增开发依赖,不会擅自升级Django
内容的提问来源于stack exchange,提问作者Daniel Quinn
相关产品推荐
相关产品推荐

