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


9

我正在使用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;
            };
        };
    };
}

Answers:


2

我看到您正在尝试使用disableTest中的haskell-package.nix来从镜头包装中删除测试。我将不得不做一些测试,以告诉您它为什么不能满足您的需求。

我一般覆盖残疾人测试cabalconfig.nixcabalNoTest。这将覆盖cabal其他haskell软件包关闭测试所使用的软件包。

这是我通常的写法:

{
    packageOverrides = pkgs: with pkgs; {
        # ...other customizations...
        haskellPackages = haskellPackages.override {
            extension = self : super : {
                cabal = pkgs.haskellPackages.cabalNoTest;
            };
        };
    };
}

12

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;
    }

有没有办法在nix-build --disable-check-phase不更改派生/输出哈希的情况下有选择地禁用测试(从类似的交互式使用角度)?
CMCDragonkai

@CMCDragonkai:您不能在不更改哈希的情况下禁用测试(具有确定性二进制输出的固定输出派生除外)。即使您可以更改哈希值,也没有一种符合人体工程学的方法可以从我所知道的命令行中进行
Gabriel Gonzalez

3

从不同角度解决您的问题的另一种方法是在功能更强大的计算机上进行测试以构建您的软件包。然后在需要时将封包复制到远程主机。

如果您使用的是相同的体系结构,并且所讨论的软件未紧密耦合到两台计算机上不同的任何硬件,则此方法很好用。

在nix手册中了解如何在机器之间共享软件包

nix的软件包管理方法启用了此功能。我经常反向使用此功能,使用功能更强大的远程计算机为本地计算机构建大量软件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.