9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

macOS+RStudioで呼び出すPythonのバージョンを指定する

Last updated at Posted at 2019-04-10

そもそもの疑問

シングルセル解析で必須のRパッケージSeuratはRunUMAP()でPythonのumap-learnを呼び出している。Windows10 + anaconda + RStudioの環境では予めpip install umap-learnしておけば問題なく動く。
しかし、macではumapがないとエラーが出て動かない。普段、pyenv global 3.6.8と指定してPython3を使っており、ターミナルからPythonを起動するとumapをimportできるのだが。どうもmacのRはシステムにもともとインストールされているPython 2.7を呼び出しているようだ。

実際、RStudioから以下のPythonのスクリプトを動かすとこの通り。

version_show.py

import sys

print(sys.version_info)

RStudioのコンソール

> reticulate::source_python('~/Desktop/version_show.py')
sys.version_info(major=2, minor=7, micro=10, releaselevel='final', serial=0)

どうにかしてPython 3.系を呼び出すようにできないものか。ここから時間を浪費したので解説します。

macに入っている色々なPython達

macには色々な形でPythonが複数入っていることが多い。色々試した結果、Rから呼べるものと呼べないものがあることがわかった。また、pyenvやanacondaがPATHを乗っ取っていても、Rは気にしないでもともとmacに入っているPythonをデフォルトで呼ぶようだ。

◯ もともとmacに入っているPython (2.7なので古すぎ)
brew install pythonでインストールしたPython
✖️ pyenv installでインストールしたPython
◯ pyenv + virtualenvで作った仮想環境
✖️ conda createで作った仮想環境

reticulateには癖がある

RからPythonを呼び出す仕組みはreticulateパッケージで実装されている。reticulate::use_python("/usr/local/bin/python3")と唱えるとRから呼び出すPythonを指定できる。
しかし、変な癖があり注意が必要である。

  1. 変なパスを渡してもエラーは出ない。しかし、R sessionを再起動するまでPythonがまったく使えなくなる。
  2. 前項のようにreticulateが受け付けるPython環境と受け付けないものがある。
  3. 呼び出すPythonのsite-packageにnumpyをインストールしていないといけない。

特に1が要注意で、失敗したらR sessionを再起動してやり直した方が良い。
reticulate::py_config()でRから呼べるPythonのパスの一覧が見られる。

解決法

結局、virtualenvがよかろうと考え、以下のように解決した。

  1. pyenv, virtualenvをインストール
  2. virtualenv researchで仮想環境を作成
  3. source /Users/foobar/research/bin/activateで仮想環境を起動、pip install umap-learnなどして必要なPythonパッケージをインストールする
  4. Rプロジェクトのルートディレクトリに.Rprofileを作成、reticulate::use_python("/Users/foobar/research/bin/python")と書いておく。

これでRから常に仮想化したPython環境を呼び出せるようになる。StackOverflowを見ると、R+macでtensorflow Rを使う人も同じ苦しみを味わっているようだ。今後もっとシンプルになればいいのだが。

> sessionInfo()
R version 3.5.3 (2019-03-11)
Platform: x86_64-apple-darwin18.2.0 (64-bit)
Running under: macOS Mojave 10.14.4

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /usr/local/Cellar/openblas/0.3.5/lib/libopenblasp-r0.3.5.dylib

locale:
[1] ja_JP.UTF-8/ja_JP.UTF-8/ja_JP.UTF-8/C/ja_JP.UTF-8/ja_JP.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] Seurat_3.0.0.9000

loaded via a namespace (and not attached):
 [1] httr_1.4.0          tidyr_0.8.3         jsonlite_1.6        viridisLite_0.3.0   splines_3.5.3       lsei_1.2-0          R.utils_2.8.0      
 [8] gtools_3.8.1        Rdpack_0.10-1       assertthat_0.2.1    ggrepel_0.8.0       globals_0.12.4      pillar_1.3.1        lattice_0.20-38    
[15] glue_1.3.1          reticulate_1.11.1   digest_0.6.18       RColorBrewer_1.1-2  SDMTools_1.1-221    colorspace_1.4-1    cowplot_0.9.4      
[22] htmltools_0.3.6     Matrix_1.2-17       R.oo_1.22.0         plyr_1.8.4          pkgconfig_2.0.2     bibtex_0.4.2        tsne_0.1-3         
[29] listenv_0.7.0       purrr_0.3.2         scales_1.0.0        RANN_2.6.1          gdata_2.18.0        Rtsne_0.15          tibble_2.1.1       
[36] ggplot2_3.1.1       ROCR_1.0-7          pbapply_1.4-0       lazyeval_0.2.2      survival_2.44-1.1   magrittr_1.5        crayon_1.3.4       
[43] R.methodsS3_1.7.1   future_1.12.0       nlme_3.1-139        MASS_7.3-51.3       gplots_3.0.1.1      ica_1.0-2           tools_3.5.3        
[50] fitdistrplus_1.0-14 data.table_1.12.2   gbRd_0.4-11         stringr_1.4.0       plotly_4.8.0        munsell_0.5.0       cluster_2.0.8      
[57] irlba_2.3.3         compiler_3.5.3      rsvd_1.0.0          caTools_1.17.1.2    rlang_0.3.4         grid_3.5.3          ggridges_0.5.1     
[64] rstudioapi_0.10     htmlwidgets_1.3     igraph_1.2.4        bitops_1.0-6        npsurv_0.4-0        gtable_0.3.0        codetools_0.2-16   
[71] R6_2.4.0            zoo_1.8-5           dplyr_0.8.0.1       future.apply_1.2.0  KernSmooth_2.23-15  metap_1.1           ape_5.3            
[78] stringi_1.4.3       parallel_3.5.3      Rcpp_1.0.1          png_0.1-7           tidyselect_0.2.5    lmtest_0.9-36  
9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?