Pixi와 쓰는 R
TL; DR
Pixi로 R도 부릴 수 있다.
왜 pixi인가?
나는 픽시를 사랑한다. 픽시를 쓰면서 파이썬 패키지를 깔거나 세팅을 할 때 고민하지 않는다. (알 수 없는 이유로) 꼬이면 지우고 다시 깔면 그만이다. R을 이렇게 파이썬처럼 운용할 수 없을까? 문득 이런 생각이 들더라. Pixi의 베이스가 되는 conda에 R이 있다. 그렇다면 pixi를 통해 R을 깔 수 있지 않을까?
다만 매 프로젝트마다 파이썬과 필요한 패키지를 깔아야 하는 것이 불만족스러운 혹은 불가능한 환경이 있을 수 있다.
이런 생각으로 쭉 해보니 의외로 잘 되더라. 이 포스팅은 (전적으로!) 이 내용을 까먹고 헤맬 미래의 나 놈을 위한 것이다.
얻는 것과 잃는 것
R의 IDE로 VS Code를 쓴다면 천군만마와도 같은 GitHub Copilot을 부릴 수 있다. 엄청난 장점이다. 잃는 것은 R과 최고의 궁합을 자랑하는 RStudio이다. RStudio에 임의의 R 커널을 연결할 수 있으면 좋겠는데 좀 더 비싼 기업용 버전인 workbench에서만 해당 기능을 지원하는 듯 싶다.
RStudio는 아쉽지만 VS Code + pixi를 쓰는 것의 장점이 아쉬움 이상이다.
Pixi setting
다음과 같은 사용 환경을 전제한다.
- OS
- Windows 11 WSL 2 + Ubutu 22.04 LTS
- Macos (Sonoma, Silicon)
- pixi
일단 R에 관해서 쭉 설명을 하고 Julia에 관한 내용을 더하겠다. R에 비하면 Julia 설치는 별 문제가 없다.
R을 깔고자 하는 디렉토리에서 아래와 같이 실행한다.
> pixi init # 픽시 초기화
> pixi add python=3.11 r-base radian # 파이썬, r-base, radian 추가
위 명령어를 실행하면 [pixi 코드를 품은 디렉토리]/.pixi/envs/default
폴더 아래 파이썬, R-base 그리고 radian이 설치된다. radian은 파이썬으로 작성된 일종의 대안 터미널이다. 꽤 쓸만하다. 그리고 해당 경로를 사용하는 셸의 PATH로 지정하자. 그래서 radian과 R을 터미널에서 실행할 수 있다. nano ~/.zshrc
등을 실행해 아래 구절을 넣고 저장하고 셸을 다시 불러오면 된다.
export PATH="$PATH:[pixi가 깔린 디렉토리]/.pixi/envs/default/bin"
Miniforge
pixi 자체가 Conda에 의존한다. 따라서 Conda를 설치하는 게 좋다. 커뮤니티 버전인 Miniforge를 설치하자. Miniforge는 Macos에서는 brew로 설치할 수 있고, Ubuntu에서는 별도의 설치 파일을 받아서 설치하면 된다.
> brew install miniforge
> curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
> bash Miniforge3-$(uname)-$(uname -m).sh
미니포지를 통해 gfortran을 설치하자. 이를 설치하지 않으면 R의 패키지 설치 과정에서 많은 문제가 생길 것이다.
> conda install -c conda-forge gfortran
아래 환경 설정을 마친 후 시험삼아서 아래 두 패키지를 설치해보자. VS Code에서 R을 쓰기 위해서 아래 두 패키지를 설치해야 한다.
> install.packages("languageserver")
> install.packages("httpgd")
R을 위한 실행 환경
R을 패키지로 설치하지 않았기 때문에 몇 가지 설정이 필요하다. R의 설정을 위해 필요한 파일은 .Renviron
, .Rprofile
두 가지이다. 이 두 파일을 $HOME
에 생성하도록 하자.
## macrtools - gfortran: start
# PATH=${PATH}:/opt/gfortran/bin
## macrtools - gfortran: end
# Setting LIB location
R_LIBS_SITE="[pixi가 깔린 디렉토리]/.pixi/envs/default/lib/R/library"
# Setting CRAN Server
local({r <- getOption("repos")
r["CRAN"] <- "https://cloud.r-project.org"
options(repos=r)})
.Renviron
파일에서는 R의 라이브러리 위치를 지정하고, Rpofile
에서는 CRAN 서버를 지정한다.
R에서 .libPaths()
를 패키지가 설치되는 위치를 확인할 수 있다.
VS Code 설정
먼저 R의 extension을 받아서 설치하자. 해당 확장을 설치한 후 몇 가지 설정을 바꿔야 한다. VS Code의 확장 설정으로 가자(Figure 1). 이후 필요한 설정을 바꾸면 된다.(Figure 2)
이외에 httpgd
를 쓰는 것을 체크하자.
VS Code로 R 쓰기
https://code.visualstudio.com/docs/languages/r
전체적인 지침은 링크에 잘 정리가 되어 있다.
Packages 설치 시 유의사항
패키지 설치 시 만날 수 있는 몇 가지 에러 유형을 패키지 별로 정리해보자.
systemfonts
systemfonts 패키지가 대체로 잘 설치되지 않는다. 이 패키지가 없으면 languageserver, devtools 등등 이에 의존하는 주요 패키지가 설치되지 않는다. 발생하는 에러 메시지를 잘 보면서 OS 별로 대응하면 된다. 하지만 때로는 시키는대로 해도 해결되지 않는 경우가 있다. 그럴 땐 어떻게 할까? R 설치에서 이 문제는 C++ 컴파일러와 관련된 이슈다. 가장 깔끔하게 해결하려면 pixi shell로 접근해서 해당 패키지를 설치하면 된다. 즉,
# pixi가 설정된 해당 디렉토리에서
> pixi shell
> radian
# In radian
> install.packages("systemfonts")
이렇게 설치하면 OS 상관 없이 대체로 잘 설치가 된다. 패키지를 업데이트하지 않는 이상 이상 설치된 이후 활용에는 pixi shell 환경이 필요하지 않다.
tidyverse
Matrix 패키지가 버전이 맞지 않아서 설치가 안된다.
https://github.com/cran/Matrix/releases
(이 글을 쓰는 시점에서) 1.6-5 버전의 Source Code의 링크를 복사한 후 devtools를 통해 설치한다.
> devtools::install_url("https://github.com/cran/Matrix/archive/refs/tags/1.6-5.zip")
MASS
위와 같은 방법으로 접근하면 된다.
https://github.com/cran/MASS/releases
(이 글을 쓰는 시점에서) MASS 7.3-60 버전이 설치 가능했다.
Julia 설치하기
R에 비하면 훨씬 깔끔하고 운용이 쉽다. brew를 이용해서 juliaup을 설치하자. Linux와 Macos에서 R보다는 훨씬 편리하게 사용할 수 있다.
Julia를 써보면 이 언어가 다른 어떤 고수준 프로그래밍 랭귀지에 비해서 “모던”하다는 사실을 느낄 수 있다. 우선 언어 자체의 설치가 간편하고, 패키지 설치 관리가 toml
을 통해 이뤄진다.
> brew install juliaup
> juliaup add release # 최신 버전을 설치한다.
> juliaup install 1.10.3 # 특정 버전을 설치한다.
> juliaup update # 업데이트
VS Code에서 Julia 확정을 설치하고 확장 설정에서 Julia: Executable Path
를 찾아서 .pixi 아래 설치된 줄리아의 실행 디렉토리를 설정한다. 터미널에서 julia를 실행하고 싶으면, .zshrc
에 해당 디렉토리를 추가하면 된다.