R을 위한 Python 설치하기

reticulate Anaconda python

R과 Python은 데이터 분석을 위한 상호 보완재라고 생각합니다. 물론 단일 솔루션을 사용하여 데이터 분석을 수행할 수도 있으나, 서로의 장단점을 이해하고 적절하게 섞어 쓰면 좀더 효율적인 데이터 분석을 수행할 수 있습니다. 그래서 이번에는 R을 위한 Python을 설치하는 방법을 다룹니다.

유충현 https://choonghyunryu.github.io (한국알사용자회)
2022-03-29

들어가기

기억이 가물거리지만, 내 노트북에는 Anaconda가 설치되어 있습니다.
리소스 관리를 잘 못하는지라 앞서 다룬 PlaidML를 사용하면서 발견한 간단한 메모를 공유합니다. 몇년된 자료지만 reticulate 패키지를 설치하면서 작성한 자료로 RStudio 환경에서 Python을 사용할 수 있는 환경을 구축합니다.

비단뱀 전성시대

Python의 사전적인 뜻은, 고대 신화속의 파르나수스(Parnassus) 산의 동굴에 살던 큰 뱀1이라고 합니다. 또한 Python 배포본인 아나콘다(Anaconda)는 비단뱀의 일종입니다. 그리고 R과 Python을 연동하는 R 패키지인 reticulate는 그물무늬비단뱀입니다. 디지털 세상에서의 암묵적인 작명법에 의해서 비단뱀이 지금도 많은 데이터 과학자들의 입에 오르내리고 있습니다.

Anaconda 설치

Anaconda란

아나콘다(Anaconda)는 데이터 과학과 관련된 데이터 조작 및 분석 용도로 여러 패키지를 묶어 만든 python과 R의 오픈소스 배포본입니다. 복잡한 패키지의 관리 및 설치를 쉽게하기 위한 목적으로 만들어졌습니다.

Anaconda 설치

Anaconda는 https://docs.anaconda.com/anaconda/install/index.html 도움말 페이지를 참고해서 설치합니다. 설치를 위한 배포본은 https://www.anaconda.com/products/distribution에서 다운로드합니다. 필자가 설치할 운영체제는 MacOS이기 때문에 MacOS을 위한 Anaconda3-2020.11-MacOSX-x86_64.pkg를 다운로드하여 설치하였습니다. 2022년 3월 기준으로는 Anaconda3-2021.11-MacOSX-x86_64.pkg을 다운로드할 수 있습니다.

Anaconda 환경 구성

conda 가상환경 생성

아나콘다의 가상환경(virtual environment)을 conda라 합니다. 여기서는 앞으로 데이터 분석에 사용할 python 가상환경을 생성합니다.

아나콘다를 설치하면 콘솔의 프롬프트가 변경됩니다. 그것은 콘솔에서 현재 어떤 환경에서 작업을 수행하는지를 알려주는 역할을 합니다. 프롬프트에 prefix(접두어)로 (bash)가 추가됨을 알 수 있습니다. 즉, 현재 콘솔에서의 작업 환경은 bash shell 환경이라는 것을 알려줍니다.

macOS 버전 10.15인 카탈리나부터 기본 쉘(Shell) 이 bash에서 zsh(Z shell)로 변경되었습니다. macOS 버전이 11.0.1인 Big Sur를 사용했었던(현재는 12.3인 Monterey를 사용합니다.) 필자의 콘솔에는 프롬프트에 (bash)가 추가되지만 사실은 zsh 환경입니다. 이 (bash)의 의미를 아나콘다의 가상환경이 아닌 사용자의 시스템 콘솔의 쉘 환경을 알려주는 것이라고 이해하면 됩니다.

(bash) $ ps
  PID TTY           TIME CMD
45033 ttys000    0:00.10 -zsh

다음과 같은 조건의 가상환경을 생성합니다.

(bash) $ conda create --name r-reticulate python=3.7

만들어진 가상환경의 목록을 다음처럼 조회할 수 있습니다. 앞서 만든 r-reticulate라는 이름의 가상환경이 조회되었습니다. 필자의 경우에는 아나콘다가 사용자 홈 디렉토리/opt/anaconda3에 설치되었고 가상환경은 아나콘다 {리렉토리}/envs/{가상환경 이름}으로 생성되었음을 알 수 있습니다.

(bash) $ conda env list
# conda environments:
#
base                  *  /Users/choonghyunryu/opt/anaconda3
r-reticulate             /Users/choonghyunryu/opt/anaconda3/envs/r-reticulate

가상환경 활성화

가상 환경에서 작업을 수행하기 위해서는 가상환경을 활성화 해야 합니다. conda activate 명령어를 수행하여 r-reticulate 가상환경을 활성화하면 프롬프트의 (bash)(가상환경 이름)으로 변경됩니다. 즉, 현재의 작업 환경이 아나콘다에 가상환경에 머물러 있다는 것을 주지시키는 것입니다.

(base) $ conda activate r-reticulate
(r-reticulate) $ 

가상환경에는 python 3.7 버전이 설치되었으며, 아나콘다의 python임을 알 수 있는 정보가 출력되었습니다.

(r-reticulate) $ python --version   
Python 3.7.9

가상환경 비활성화

가상환경의 비활성화는 conda deactivate 명령어를 사용한합니다. 예제의 프롬프트를 보면 가상환경에서 시스템 쉘 모드로 변경된 것을 알 수 있습니다.

(r-reticulate) $ conda deactivate
(base) $

Deep Learing 엔진 설치

R이 python보다 취약한 것은 딥러닝 관련 분야일 것입니다. 그래서 python의 힘을 빌려서 딥러닝을 수행할 수 있는 몇 가지 python 패키지와 R 패키지를 설치합니다.

tensorflow와 keras 설치

R에서 딥러닝을 수행할 수 있도록 tensorflow와 keras를 설치합니다. 설치는 두 단계로 진행됩니다.

  1. 먼저 tensorflow와 keras를 R 환경에서 사용할 수 있는 tensorflow와 keras R 패키지를 설치한 다음,
  2. tensorflow와 keras python 패키지를 설치합니다.

tensorflow와 keras R 패키지 설치

R 패키지는 R 환경에서 다음과 같이 설치합니다.

install.packages("tensorflow")
install.packages("keras")

tensorflow와 keras python 패키지 설치

우리가 사용할 keras는 뉴럴 네트워크 분석을 위해 tensorflow로 개발된 고수준(high-level) API입니다. 그러므로 tensorflow 설치 없이 동작하지 못합니다. 그래서 tensorflow와 keras를 함께 설치해야 합니다. 만약 tensorflow만 연동할 경우에는 keras를 설치하지 않아도 됩니다.

tensorflow와 keras python 패키지는 사용자 시스템의 python 환경에 설치하지 않고, 다음처럼 아나콘다 가상환경에 설치합니다. method, envname 인수를 사용해서 앞에서 만들어 놓은 r-reticulate 가상환경에 설치할 수 있습니다. 앞에서 설치한 conda의 python 버전이 3.7이었으므로 conda_python_version 인수에 해당 버전을 지정합니다.

keras 패키지의 install_keras() 함수는 tensorflow와 keras python 패키지를 설치합니다. install_keras() 함수는 내부적으로 tensorflow 패키지의 install_tensorflow() 함수를 호출하기 때문에 install_keras() 함수로 한번에 설치하는 것이 효율적입니다. 아니면 tensorflow 패키지의 install_tensorflow() 함수로 tensorflow를 설치한 후에 keras 패키지의 install_keras() 함수로 keras를 설치할 수도 있습니다.

library(keras)
install_keras(method = "conda", envname = "r-reticulate", 
              conda_python_version = "3.7")

conda 가상환경 연결 확인

reticulate 패키지는 R에서 python을 사용할 수 있게 도와주는 패키지입니다. 이 패키지를 이용해서 R에서 conda 가상환경의 리소스를 사용할 수 있는 환경을 설정합니다.

> library(reticulate)

> use_condaenv("r-reticulate", required = TRUE)

> print(py_config())
python:         /Users/choonghyunryu/opt/anaconda3/envs/r-reticulate/bin/python
libpython:      /Users/choonghyunryu/opt/anaconda3/envs/r-reticulate/lib/libpython3.7m.dylib
pythonhome:     /Users/choonghyunryu/opt/anaconda3/envs/r-reticulate:/Users/choonghyunryu/opt/anaconda3/envs/r-reticulate
version:        3.7.9 (default, Aug 31 2020, 07:22:35)  [Clang 10.0.0 ]
numpy:          /Users/choonghyunryu/opt/anaconda3/envs/r-reticulate/lib/python3.7/site-packages/numpy
numpy_version:  1.19.2

NOTE: Python version was forced by use_python function

tensorflow 설치 확인

python tensorflow 패키지의 tf.constant()를 다음처럼 R의 tensorflow 패키지로 호출해 본다. python 환경에서의 ‘.’이 R 환경에서’$’로 변경되었을 뿐 호출 방법은 유사합니다.

> library(tensorflow)

> tf$constant("Hellow Tensorflow")

## Tensor("Const:0", shape=(), dtype=string)

keras 설치 확인

python keras 패키지는, 간단하게 2행 3열 행렬의 표준화를 수행하는 예제로 설치를 확인합니다.

> library(keras)

> set.seed(123L)
> x <- matrix(rnorm(6), ncol = 3)
> x

##            [,1]       [,2]      [,3]
## [1,] -0.5604756 1.55870831 0.1292877
## [2,] -0.2301775 0.07050839 1.7150650
> normalize(x)

##            [,1]      [,2]       [,3]
## [1,] -0.3373410 0.9381608 0.07781615
## [2,] -0.1329063 0.0407121 0.99029210

opencv python 패키지 설치

가상 환경인 r-reticulateopencv python 패키지를 설치합니다.

(base) $ conda activate r-reticulate
(r-reticulate) $ conda install opencv 
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /Users/choonghyunryu/opt/anaconda3/envs/r-reticulate

  added / updated specs:
    - opencv


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    cairo-1.14.12              |       hc4e6be7_4         860 KB
    ffmpeg-4.0                 |       h01ea3c9_0        21.8 MB
    fontconfig-2.13.0          |       h5d5b041_1         202 KB
    graphite2-1.3.14           |       h38d11af_0          80 KB
    harfbuzz-1.8.8             |       hb8d4a28_0         414 KB
    hdf5-1.10.2                |       hfa1e0ec_1         3.0 MB
    jasper-2.0.14              |       h636a363_1         654 KB
    libopencv-3.4.2            |       h7c891bd_1        18.5 MB
    libopus-1.3.1              |       h1de35cc_0         480 KB
    libvpx-1.7.0               |       h378b8a2_0         1.3 MB
    mkl-service-2.3.0          |   py37h9ed2024_0          40 KB
    mkl_fft-1.2.0              |   py37hc64f4ea_0         141 KB
    mkl_random-1.1.1           |   py37h959d312_0         284 KB
    numpy-1.19.2               |   py37h456fd55_0          21 KB
    numpy-base-1.19.2          |   py37hcfb5961_0         4.0 MB
    opencv-3.4.2               |   py37h6fd60c2_1          11 KB
    pixman-0.40.0              |       haf1e3a3_0         340 KB
    py-opencv-3.4.2            |   py37h7c891bd_1         1.0 MB
    six-1.15.0                 |   py37hecd8cb5_0          27 KB
    ------------------------------------------------------------
                                           Total:        53.1 MB

The following NEW packages will be INSTALLED:

  blas               pkgs/main/osx-64::blas-1.0-mkl
  bzip2              pkgs/main/osx-64::bzip2-1.0.8-h1de35cc_0
  cairo              pkgs/main/osx-64::cairo-1.14.12-hc4e6be7_4
  ffmpeg             pkgs/main/osx-64::ffmpeg-4.0-h01ea3c9_0
  fontconfig         pkgs/main/osx-64::fontconfig-2.13.0-h5d5b041_1
  freetype           pkgs/main/osx-64::freetype-2.10.4-ha233b18_0
  gettext            pkgs/main/osx-64::gettext-0.19.8.1-hb0f4f8b_2
  glib               pkgs/main/osx-64::glib-2.66.1-h9bbe63b_0
  graphite2          pkgs/main/osx-64::graphite2-1.3.14-h38d11af_0
  harfbuzz           pkgs/main/osx-64::harfbuzz-1.8.8-hb8d4a28_0
  hdf5               pkgs/main/osx-64::hdf5-1.10.2-hfa1e0ec_1
  icu                pkgs/main/osx-64::icu-58.2-h0a44026_3
  intel-openmp       pkgs/main/osx-64::intel-openmp-2019.4-233
  jasper             pkgs/main/osx-64::jasper-2.0.14-h636a363_1
  jpeg               pkgs/main/osx-64::jpeg-9b-he5867d9_2
  libgfortran        pkgs/main/osx-64::libgfortran-3.0.1-h93005f0_2
  libiconv           pkgs/main/osx-64::libiconv-1.16-h1de35cc_0
  libopencv          pkgs/main/osx-64::libopencv-3.4.2-h7c891bd_1
  libopus            pkgs/main/osx-64::libopus-1.3.1-h1de35cc_0
  libpng             pkgs/main/osx-64::libpng-1.6.37-ha441bb4_0
  libtiff            pkgs/main/osx-64::libtiff-4.1.0-hcb84e12_1
  libvpx             pkgs/main/osx-64::libvpx-1.7.0-h378b8a2_0
  libxml2            pkgs/main/osx-64::libxml2-2.9.10-h7cdb67c_3
  lz4-c              pkgs/main/osx-64::lz4-c-1.9.2-h79c402e_3
  mkl                pkgs/main/osx-64::mkl-2019.4-233
  mkl-service        pkgs/main/osx-64::mkl-service-2.3.0-py37h9ed2024_0
  mkl_fft            pkgs/main/osx-64::mkl_fft-1.2.0-py37hc64f4ea_0
  mkl_random         pkgs/main/osx-64::mkl_random-1.1.1-py37h959d312_0
  numpy              pkgs/main/osx-64::numpy-1.19.2-py37h456fd55_0
  numpy-base         pkgs/main/osx-64::numpy-base-1.19.2-py37hcfb5961_0
  opencv             pkgs/main/osx-64::opencv-3.4.2-py37h6fd60c2_1
  pcre               pkgs/main/osx-64::pcre-8.44-hb1e8313_0
  pixman             pkgs/main/osx-64::pixman-0.40.0-haf1e3a3_0
  py-opencv          pkgs/main/osx-64::py-opencv-3.4.2-py37h7c891bd_1
  six                pkgs/main/osx-64::six-1.15.0-py37hecd8cb5_0
  zstd               pkgs/main/osx-64::zstd-1.4.5-h41d2c2f_0


Proceed ([y]/n)? y


Downloading and Extracting Packages
hdf5-1.10.2          | 3.0 MB    | ################################################################### | 100% 
cairo-1.14.12        | 860 KB    | ################################################################### | 100% 
jasper-2.0.14        | 654 KB    | ################################################################### | 100% 
numpy-base-1.19.2    | 4.0 MB    | ################################################################### | 100% 
mkl_random-1.1.1     | 284 KB    | ################################################################### | 100% 
mkl_fft-1.2.0        | 141 KB    | ################################################################### | 100% 
py-opencv-3.4.2      | 1.0 MB    | ################################################################### | 100% 
libopencv-3.4.2      | 18.5 MB   | ################################################################### | 100% 
libopus-1.3.1        | 480 KB    | ################################################################### | 100% 
mkl-service-2.3.0    | 40 KB     | ################################################################### | 100% 
pixman-0.40.0        | 340 KB    | ################################################################### | 100% 
fontconfig-2.13.0    | 202 KB    | ################################################################### | 100% 
graphite2-1.3.14     | 80 KB     | ################################################################### | 100% 
six-1.15.0           | 27 KB     | ################################################################### | 100% 
libvpx-1.7.0         | 1.3 MB    | ################################################################### | 100% 
numpy-1.19.2         | 21 KB     | ################################################################### | 100% 
ffmpeg-4.0           | 21.8 MB   | ################################################################### | 100% 
harfbuzz-1.8.8       | 414 KB    | ################################################################### | 100% 
opencv-3.4.2         | 11 KB     | ################################################################### | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

  1. 파이썬이란 무엇인가?. https://ghgus0702.tistory.com/9↩︎

Citation

For attribution, please cite this work as

유충현 (2022, March 29). Dataholic: R을 위한 Python 설치하기. Retrieved from https://choonghyunryu.github.io/2022-03-29-anaconda

BibTeX citation

@misc{유충현2022r을,
  author = {유충현, },
  title = {Dataholic: R을 위한 Python 설치하기},
  url = {https://choonghyunryu.github.io/2022-03-29-anaconda},
  year = {2022}
}