Nix:安装 Haskell 包时跳过单元测试

Mii*_*kka 9 compiling package-management haskell nix

我正在使用 Nix 在资源有限的共享主机上安装我家下的软件包(因此没有二进制软件包)。我正在尝试安装 git-annex。在构建其依赖项之一 haskell-lens 时,单元测试消耗了太多内存,以至于它们被杀死并且安装失败。

有没有办法跳过单元测试来安装软件包?我查看了 Cabal builder,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;
            };
        };
    };
}
Run Code Online (Sandbox Code Playgroud)

Gab*_*lez 13

nixpkgs reorganized things since the accepted answer was posted and there is a new function for disabling tests. You now wrap any Haskell package with the pkgs.haskell.lib.dontCheck function to disable tests. Here is an example Nix expression from one of my Haskell projects where I had to disable tests for the shared-memory dependency when building on 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;
    }
Run Code Online (Sandbox Code Playgroud)


Dav*_*rak 2

我看到您试图使用disableTestfind inhaskell-package.nix来删除镜片包装中的测试。我必须做一些测试才能确切地告诉你为什么它不能满足你的需求。

我已禁用一般测试覆盖到中cabal的包。这会覆盖其余 haskell 包使用的包,关闭测试。config.nixcabalNoTestcabal

我通常是这样写的:

{
    packageOverrides = pkgs: with pkgs; {
        # ...other customizations...
        haskellPackages = haskellPackages.override {
            extension = self : super : {
                cabal = pkgs.haskellPackages.cabalNoTest;
            };
        };
    };
}
Run Code Online (Sandbox Code Playgroud)