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

问题描述 投票:3回答:1

我尝试从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')

我的问题是双重的:

  • 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')无济于事。

r macos rstudio
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.