【问题标题】:How can I ban a package from being added to Pipenv.lock and installed by Pipenv?如何禁止将软件包添加到 Pipenv.lock 并由 Pipenv 安装?
【发布时间】:2019-09-16 15:00:22
【问题描述】:

有两个包提供了一个名为jsonfield的模块:

不幸的是,我们有依赖于这两个包和两个包的依赖项,虽然可以互换,但将数据存储到数据库中的方式不同。这导致weird and hard to catch bugs。此外,不幸的是,Pipenv 在安装依赖项时没有任何确定的操作顺序。有时会安装django-jsonfield,有时会安装jsonfield。这意味着有时,我们的应用程序会随机中断,因为安装的是 jsonfield 而不是 django-jsonfield

有没有办法可以禁止将django-jsonfield 添加到Pipenv.lock,以便只安装jsonfield

【问题讨论】:

标签: python django pip pipenv


【解决方案1】:

从外观上看,您的处境相当棘手……除了在每次生成 Pipfile.lock 后手动编辑之外,目前我所知道的没有干净的解决方案。

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

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

您可能对此讨论感兴趣并最终参与进来: https://github.com/pypa/packaging-problems/issues/154。对您的情况特别感兴趣的是pip 允许在安装新软件包时覆盖已安装的软件包。


未经测试

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

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

【讨论】:

  • 使用标记有效。不幸的是,“False”似乎不起作用。
猜你喜欢
  • 2020-09-26
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多