nix-shell default.nix:如何使用 zlib 依赖项安装 rPackages.data_table?

nix-shell default.nix:如何使用 zlib 依赖项安装 rPackages.data_table?

我在 ubuntu 22.04 上安装了多用户 nix。我正在尝试开发一个依赖于 的 R 包data.table,但无法使用data.tablezlib头安装,以便我可以使用fwritegzip 压缩功能。

这是default.nix我正在使用的direnv

with import <nixpkgs> {};

let
    rlibs = with rPackages; [
      R
      Rcpp
      data_table
      roxygen2
      pkgbuild
    ];

    _libs = with pkgs; [
        zlib
        ccls
    ];

in mkShell {
    nativeBuildInputs = [
      rlibs
      _libs
    ];
}

一切都安装正常并运行,但是当我打电话时

fwrite(iris, "iris.txt.gz', compress="gzip")我明白了

Compression in fwrite uses zlib library. Its header files were not found at the time data.table was compiled. To enable fwrite compression, please reinstall data.table and study the output for further guidance.

起初我没有zlibdefault.nix所以我添加了它并尝试重新安装。这需要清理整套包裹。我可以这样做nix-store --delete,但这也让我对所有指定的包进行垃圾收集。但重新安装并没有解决问题。我也没有看到任何要检查的输出。

如何指定zlib为依赖项?还有没有办法用 nix 重新安装软件包?我在网上找不到任何关于它的文档 - 任何结果都是关于重新安装 nix 作为一个整体,而不是单个包。

更新:我也尝试过

nix-shell -p pkg-config zlib R rPackages.data_table

安装过程中data.table,出现未找到 pkg-config 的消息。但是,在该 shell 中,运行pkg-config --libs zlib会给出

-L/nix/store/37a5krk4a1a8vhl93q2bm9nbv8hymyii-zlib-1.2.13/lib -lz

尝试 nix 手册覆盖也不起作用:

{
    packageOverrides = super: let self = super.pkgs; in
    {

        rEnv = super.rWrapper.override {
            packages = with self.rPackages; [
                data_table
                ];
        };
    };
}

答案1

一般来说,当使用解释器时,只有声明为该解释器一部分的包才可用。对于 R,这可以通过以下方式实现覆盖rWrapper

相关内容