我正试图使用Rscript
从命令行运行一个R脚本。R脚本调用一些python代码,并且在交互运行时运行良好。然而,当我从Rscript
调用它时,gdal
会出现一些错误。我相信这些错误与python 3 vs 2有关。例如,在交互式R会话中运行以下命令:
system("python --version)
产生
Python 2.7.9
同时从shell运行"相同"命令:
$ python --version
产生
Python 3.5.1::Continuum Analytics,股份有限公司
如何将$ Rscript "foo.R"
调用指向python 2.7.9?
当您从shell命令行调用$ python --version
或$ Rscript -e 'system("python --version")'
时,您在Python虚拟环境中操作,可能是由virtualenv
创建的。具体来说,您正在执行/home/foo/miniconda3/bin/python
当您从RStudio运行system("python --version")
时,您将获得系统默认版本。具体来说,您正在执行/usr/bin/python
。
如何将
$ Rscript "foo.R"
调用指向python 2.7.9?
这取决于您是如何进入虚拟Python环境的。如果它是由virtualenv
创建的,只需将其停用即可:
$ deactivate
$ Rscript -e 'system("python --version")'
2.7.9
编辑:您似乎正在使用miniconda创建的虚拟环境。如果是这种情况,您可以通过编辑PATH环境变量来使用系统默认的Python。如何编辑PATH取决于您希望更改生效的时间。
对于只为一个命令而丢失的更改,请尝试以下操作:
$ PATH="$(echo "$PATH" | sed -e s,:/usr/local/sbin,,)" Rscript -e 'system("python --version")'
要使您的更改持续单个shell会话的持续时间,请尝试以下操作:
$ PATH="$(echo "$PATH" | sed -e s,:/usr/local/sbin,,)" $ python --version $ Rscript -e 'system("python --version")'
要永久更改PATH,请适当地编辑文件$HOME/.bashrc。您需要启动一个新的终端会话才能对此产生影响。
解决方案是在我的R脚本中插入对methods
库的调用,并使用以下命令创建/加载python 2环境:
$ conda create --name python2 python=2
$ source activate python2
请参阅:
Rscript不加载方法包,R加载——为什么,结果是什么
和
http://conda.pydata.org/docs/py2or3.html