遇到的问题
在Ubuntu 20.04 LTS环境中,调用conda一个已安装R、python、pandas包的env。
程序名.py中第一行为:
import pandas as pd
随后在R中输入:
library(reticulate)
py_run_file('程序名.py')
报错信息为:
Error in py_run_file_impl(file, local, convert) :
ModuleNotFoundError: No module named 'pandas'
Detailed traceback:
File "<string>", line 2, in <module>
File "/home/自己设置的R包路径/reticulate/python/rpytools/loader.py", line 44, in _import_hook
level=level
尝试解决的过程
在终端输入pip install pandas
命令后,提示我该包已经存在,但是进入R后又调用失败,猜测是因为R使用的python路径和envs的python路径不相同。
在看了R调用Python(reticulate包的基本使用)一文之后,分别输入
use_condaenv("/home/douer_unix/anaconda3/envs/环境名/bin/python")
use_python("/home/douer_unix/anaconda3/envs/环境名/bin/python")
再调用该包均还是报错,不太懂是什么情况,继续尝试。
解决
输入py_config()
查看安装的python版本环境,一看吓一跳
> py_config()
python: /home/douer_unix/.local/share/r-miniconda/envs/r-reticulate/bin/python
libpython: /home/douer_unix/.local/share/r-miniconda/envs/r-reticulate/lib/libpython3.6m.so
pythonhome: /home/douer_unix/.local/share/r-miniconda/envs/r-reticulate:/home/douer_unix/.local/share/r-miniconda/envs/r-reticulate
version: 3.6.13 | packaged by conda-forge | (default, Feb 19 2021, 05:36:01) [GCC 9.3.0]
numpy: /home/douer_unix/.local/share/r-miniconda/envs/r-reticulate/lib/python3.6/site-packages/numpy
numpy_version: 1.19.5
我啥时候装的r-miniconda???
(后面反应过来好像是我在install.packages(‘reticulate’)的时候正在峡谷奋战,看屏幕问了个是否安装miniconda我直接输y了……)
找到了原因后直接卸载:
$ cd /home/douer_unix/.local/share/r-miniconda/
$ ls
LICENSE.txt compiler_compat condabin etc info pkgs shell x86_64-conda_cos6-linux-gnu
bin conda-meta envs include lib share ssl
$ cd ..
$ rm -r r-miniconda/
$ cd
$ sudo vim .bashrc
参考了一下 linux 服务器上删除miniconda流程 一文,但是我在.bashrc的时候发现miniconda路径又不在其中,就没有删。
再进入R调用一下试试:
> library(reticulate)
> py_config()
No non-system installation of Python could be found.
Would you like to download and install Miniconda?
Miniconda is an open source environment management system for Python.
See https://docs.conda.io/en/latest/miniconda.html for more details.
Would you like to install Miniconda? [Y/n]: n
……略……
python versions found:
你已有的python路径
这里选了n之后,它会给出你环境中已有的python路径,选择一个你需要的路径输入:
$ use_python("你需要的+上面显示的一个路径")
再调用就大功告成啦!
以防万一,最后附上一下 reticulate的官方说明网站,需要自取~