为什么和Sys.which返回不同的路径?

时间:2018-01-03 20:30:17

标签: r macos rstudio

我尝试从R运行Python脚本:

system('python script.py arg1 arg2')

出了错误:

  

ImportError:没有名为pandas的模块

这是一个令人惊讶的事情,因为脚本正在按照预期从终端工作。之前遇到过这种类型的问题(knitrengine.path chunk选项),我知道要检查:

Sys.which('python')
#            python 
# "/usr/bin/python"

并将其与命令行进行比较:

$ which python
# /Users/michael.chirico/anaconda2/bin/python

(即出现错误是因为我为anaconda发行版安装了pandas,但TBH我不知道为什么我有不同的发行版)

因此我可以通过运行来解决我的问题:

system('/Users/michael.chirico/anaconda2/bin/python script.py arg1 arg2')

我的问题是双重的:

  • R system / Sys.which如何找到与我的终端不同的python
  • 除了每次都写出完整的二进制路径之外,我该如何解决这个问题呢?

我读了?Sys.which一些提示,但无济于事。特别是,?Sys.which建议Sys.which 使用which

  

这是系统命令which

的接口

显然(?)不真实;可以肯定的是,我检查了Sys.which('which')which which以确认两者都指向/usr/bin/which(由此噱头引导):

  

在Unix上,安装R时找到(通常/usr/bin/which)的完整路径。

对于后者,我突然想到Sys.setenv(python = '/Users/michael.chirico/anaconda2/bin/python')无济于事。

1 个答案:

答案 0 :(得分:1)

正如一些评论所暗示的那样,这是一个问题,因为PATH环境变量对于Finder(或Dock)启动的程序而言不同于终端中的程序。有一些方法可以为Dock启动的应用程序设置PATH,但它们并不漂亮。这是一个开始寻找你是否想要走这条路的地方:

https://apple.stackexchange.com/questions/51677/how-to-set-path-for-finder-launched-applications

你可以做的另一件事,可能更简单,就是告诉R在启动时设置PATH变量,使用Sys.setenv将路径添加到所需的Python实例。通过将命令放在相应位置的.Rprofile文件中,您可以只为一个项目,整个用户帐户或整个系统执行此操作。有关如何执行此操作的更多信息:

https://stat.ethz.ch/R-manual/R-devel/library/base/html/Startup.html