우분투 22.04에 다중 사용자 nix 설치가 있습니다. gzip에 의존하는 R 패키지를 개발하려고 하는데 gzip 압축 기능을 사용할 수 있도록 헤더를 data.table
사용하여 설치할 수 없습니다 .data.table
zlib
fwrite
이것이 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를 찾을 수 없다는 메시지가 나타납니다. 그러나 해당 쉘에서 실행하면 다음이 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
씌우다.