Pixi와 쓰는 R과 Julia

computer-tool
r-stat
pixi
꼬이면 지우고 말지!
Author

JS HUHH

Published

April 3, 2024

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)

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에 비하면 훨씬 깔끔하고 운용이 쉽다. 다만 약간의 우회로가 필요하다. Conda를 이용해 Julia를 바로 설치해보면, OS에 따라서 설치가 되지 않는 경우가 있다. Juliaup을 먼저 설치하고 Pixi의 셸 환경 안에서 이를 이용해서 Julia를 설치하면 된다.

Julia를 써보면 이 언어가 다른 어떤 고수준 프로그래밍 랭귀지에 비해서 “모던”하다는 사실을 느낄 수 있다. 우선 언어 자체의 설치가 간편하고, 패키지 설치 관리가 toml을 통해 이뤄진다.

> pixi add juliaup
> pixi shell 
> juliaup add release # 최신 버전을 설치한다. 
> juliaup install 1.10.3 # 특정 버전을 설치한다.

VS Code에서 Julia 확정을 설치하고 확장 설정에서 Julia: Executable Path를 찾아서 .pixi 아래 설치된 줄리아의 실행 디렉토리를 설정한다. 터미널에서 julia를 실행하고 싶으면, .zshrc에 해당 디렉토리를 추가하면 된다.