我尝试从R运行Python脚本:
system('python script.py arg1 arg2')
出了错误:
ImportError:没有名为pandas的模块
这是一个令人惊讶的事情,因为脚本正在按照预期从终端工作。之前遇到过这种类型的问题(knitr
,engine.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')
我的问题是双重的:
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')
无济于事。
答案 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