nix-shell default.nix: zlib 종속성을 사용하여 rPackages.data_table을 설치하는 방법은 무엇입니까?

nix-shell default.nix: zlib 종속성을 사용하여 rPackages.data_table을 설치하는 방법은 무엇입니까?

우분투 22.04에 다중 사용자 nix 설치가 있습니다. gzip에 의존하는 R 패키지를 개발하려고 하는데 gzip 압축 기능을 사용할 수 있도록 헤더를 data.table사용하여 설치할 수 없습니다 .data.tablezlibfwrite

이것이 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.tablepkg-config를 찾을 수 없다는 메시지가 나타납니다. 그러나 해당 쉘에서 실행하면 다음이 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씌우다.

관련 정보