我正在使用 Nix 在资源有限的共享主机上安装我家下的软件包(因此没有二进制软件包)。我正在尝试安装 git-annex。在构建其依赖项之一 haskell-lens 时,单元测试会消耗大量内存,导致它们被杀死并且安装失败。
有没有办法跳过单元测试来安装软件包?我查看了 Cabal 构建器,haskell-packages.nix
在我看来,您可以通过设置enableCheckPhase
为 false 来禁用测试。我在 中尝试了以下操作~/.nixpkgs/config.nix
,但测试仍在运行:
{
packageOverrides = pkgs: with pkgs; {
# ...other customizations...
haskellPackages = haskellPackages.override {
extension = self : super : {
self.lens = self.disableTest self.lens;
};
};
};
}
答案1
nixpkgs
自从发布了接受的答案以来就重新组织了事情,并且有一个用于禁用测试的新功能。现在,您pkgs.haskell.lib.dontCheck
可以使用禁用测试的功能来包装任何 Haskell 包。下面是来自我的 Haskell 项目之一的 Nix 表达式示例,shared-memory
在 OS X 上构建时我必须禁用依赖项测试:
{ pkgs ? import <nixpkgs> {}, compiler ? "ghc7103" }:
pkgs.haskell.packages.${compiler}.callPackage ./my-project.nix
{ shared-memory =
let shared-memory = pkgs.haskell.packages.${compiler}.shared-memory;
in if pkgs.stdenv.isDarwin
then pkgs.haskell.lib.dontCheck shared-memory
else shared-memory;
}
答案2
另一种答案是从不同的角度解决您的担忧,即通过在更强大的机器上进行测试来构建您的软件包。然后在需要时将闭包复制到远程主机。
如果您使用相同的架构并且相关软件没有与两台机器上不同的任何硬件紧密耦合,那么这种方法很有效。
阅读有关如何在机器之间共享包在尼克斯手册中。
这是一个很好的功能,它启用了 nix 的包管理方法。我经常反向使用此功能,使用更强大的远程计算机为我的本地计算机构建大量软件。
答案3
我看到你正在尝试使用disableTest
发现haskell-package.nix
可以从镜片包装中删除测试。我必须做一些测试才能确切地告诉你为什么它不能满足你的需求。
我已经禁用了一般测试,将cabal
包覆盖config.nix
到cabalNoTest
.这会覆盖cabal
其余 haskell 包使用的包,关闭测试。
我通常是这样写的:
{
packageOverrides = pkgs: with pkgs; {
# ...other customizations...
haskellPackages = haskellPackages.override {
extension = self : super : {
cabal = pkgs.haskellPackages.cabalNoTest;
};
};
};
}