是否因为省略了依赖项而将包从 Stackage LTS 中排除?
Posted
技术标签:
【中文标题】是否因为省略了依赖项而将包从 Stackage LTS 中排除?【英文标题】:Is a package excluded from Stackage LTS because of an omitted dependency? 【发布时间】:2018-10-14 18:38:58 【问题描述】:我有点困惑,对包的依赖如何影响将它包含在 Stackage LTS 中;具体来说,如果
package A 需要 package B,并且 当包 B 是 installed as an extra-dep 在 LTS-X.Y 之上时,包 A 有效,但是 包B本身是not in LTS-X.Y,是否从 LTS-X.Y 打包 A have to be excluded,特别是如果
排除 B 的唯一原因是 because of a test suite dependency,而不是库本身的依赖项?【问题讨论】:
是的。但我想 LTS 的重点是拥有“正常工作”的软件包。这就是为什么那些有问题的没有被列出的原因。但是,我知道 LTS 中的某些包在某些情况下不能使用开箱即用的堆栈进行编译,特别是因为堆栈没有在 Windows 上正确设置 msys。所以我不确定了 @M.Aroosi 这让我感到困惑:A 与 LTS-X.Y + B 一起工作,如果 B 在 LTS-X.Y 中,A 将工作,B 将作为 LTS 的一部分工作。换句话说,B 和 A 将一起“正常工作”并作为 LTS 的一部分。 【参考方案1】:我会复制/粘贴my answer on github
包A一定要排除吗?
不,不必排除它。原因如下:
即使排除 B 的唯一原因是因为测试套件依赖性
在这种情况下,我们可以将 B 添加到构建计划中并将其标记在 skipped-tests
部分下,以避免拉入其测试套件依赖项。 LTS 和夜间快照都是如此。
(但是,更可取的做法是修复 B 的依赖问题,以便可以运行测试套件。)
为了进一步澄清,回应@bergey 的回答:
只有在包的维护者同意使其依赖项保持最新时才包含包
这仅适用于明确包含的包。一些包是传递依赖,它们被隐含包含在内,并不一定要遵守如此严格的标准。 (但是,将来我们可能消除隐式包含的概念,而是明确地包含所有包。)
也可以设置例外,以便包含一个包,即使它的测试套件或其基准与 snapsnot 有不兼容的依赖约束。
当然,首选的方法是不需要进行此类例外处理,我们鼓励所有维护者保持其所有构建目标为最新。
最后,请允许我指出,这个问题可能更适合the stackage mailing list,诚然没有很好地宣传或利用。
【讨论】:
【参考方案2】:是的,对于给定 Stackage 快照中的每个包,它的所有传递依赖项也在快照中。此外,仅当包的维护者同意使其依赖关系保持最新时,才包含包。在the README on github 中有更多详细信息。一个excerpt:
所有包都可以从 Hackage 构建和测试。我们推荐使用 Stack Travis 脚本,它可以确保包不会意外地不完整。 所有包都与所有依赖项的最新版本兼容(您可以通过访问http://packdeps.haskellers.com/feed?needle=PACKAGENAME 找到限制性上限)。 快照中的所有包都与快照中使用的 GHC 随附的库版本兼容(有关宽松下限的更多信息)。【讨论】:
所以在上述情况下,A 必须想办法放弃对 B 的依赖。对吗? 您的选择是采用 MissingH,停止依赖它,或者不将您的包放入 Stackage。 让我们假设问题的重点是找到让 a 进入 LTS 的方法。以上是关于是否因为省略了依赖项而将包从 Stackage LTS 中排除?的主要内容,如果未能解决你的问题,请参考以下文章
sh 将包从私有PPA添加到chroot并剥离对私有PPA的引用
使用 TOAD for Oracle 将包从一个数据库复制到另一个数据库