如何禁止 Pipenv 添加到 Pipenv.lock 并安装软件包?
How can I ban a package from being added to Pipenv.lock and installed by Pipenv?
有两个软件包提供了一个名为 jsonfield
:
的模块
不幸的是,我们有依赖于这两个包的依赖项,虽然可以互换,但以不同的方式将数据存储到数据库中。这导致 weird and hard to catch bugs。另外,不幸的是,Pipenv 在安装依赖项时没有任何确定的操作顺序。有时会安装 django-jsonfield
,有时会安装 jsonfield
。这意味着有时我们的应用程序会随机中断,因为安装了 jsonfield
而不是 django-jsonfield
.
有什么方法可以禁止 django-jsonfield
添加到 Pipenv.lock
以便只安装 jsonfield
?
从表面上看,你处在一个相当棘手的境地......除了在每次生成后手动编辑你的 Pipfile.lock
之外,我目前还没有任何干净的解决方案。
你真的应该和罪魁祸首项目的开发者谈谈:
jsonfield
和 django-jsonfield
应该就其顶级包的不同名称达成一致。
- 或者依赖于
jsonfield
或 django-jsonfield
的项目应该就两者之一达成一致并放弃另一个。
您可能对本次讨论感兴趣并最终发表意见:
https://github.com/pypa/packaging-problems/issues/154。在您的案例中特别感兴趣的是 pip
允许在安装新包时覆盖已安装的包。
未测试:
您可以尝试在不需要的依赖项上设置不太可能的标记:
django-jsonfield = { markers="python_version < '2'" }
有两个软件包提供了一个名为 jsonfield
:
不幸的是,我们有依赖于这两个包的依赖项,虽然可以互换,但以不同的方式将数据存储到数据库中。这导致 weird and hard to catch bugs。另外,不幸的是,Pipenv 在安装依赖项时没有任何确定的操作顺序。有时会安装 django-jsonfield
,有时会安装 jsonfield
。这意味着有时我们的应用程序会随机中断,因为安装了 jsonfield
而不是 django-jsonfield
.
有什么方法可以禁止 django-jsonfield
添加到 Pipenv.lock
以便只安装 jsonfield
?
从表面上看,你处在一个相当棘手的境地......除了在每次生成后手动编辑你的 Pipfile.lock
之外,我目前还没有任何干净的解决方案。
你真的应该和罪魁祸首项目的开发者谈谈:
jsonfield
和django-jsonfield
应该就其顶级包的不同名称达成一致。- 或者依赖于
jsonfield
或django-jsonfield
的项目应该就两者之一达成一致并放弃另一个。
您可能对本次讨论感兴趣并最终发表意见:
https://github.com/pypa/packaging-problems/issues/154。在您的案例中特别感兴趣的是 pip
允许在安装新包时覆盖已安装的包。
未测试:
您可以尝试在不需要的依赖项上设置不太可能的标记:
django-jsonfield = { markers="python_version < '2'" }