如何禁止 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 之外,我目前还没有任何干净的解决方案。

你真的应该和罪魁祸首项目的开发者谈谈:

  • jsonfielddjango-jsonfield 应该就其顶级包的不同名称达成一致。
  • 或者依赖于 jsonfielddjango-jsonfield 的项目应该就两者之一达成一致并放弃另一个。

您可能对本次讨论感兴趣并最终发表意见: https://github.com/pypa/packaging-problems/issues/154。在您的案例中特别感兴趣的是 pip 允许在安装新包时覆盖已安装的包。


未测试:

您可以尝试在不需要的依赖项上设置不太可能的标记:

django-jsonfield = { markers="python_version < '2'" }