我在 ubuntu 22.04 上安装了多用户 nix。我正在尝试开发一个依赖于 的 R 包data.table
,但无法使用data.table
标zlib
头安装,以便我可以使用fwrite
gzip 压缩功能。
这是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.
起初我没有zlib
,default.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
。