【发布时间】:2018-06-13 13:24:31
【问题描述】:
我尝试从 R 运行 Python 脚本:
system('python script.py arg1 arg2')
得到一个错误:
ImportError: 没有名为 pandas 的模块
这有点令人惊讶,因为脚本按预期从终端运行。之前遇到过此类问题(使用knitr,因此engine.path 块选项),我知道要检查:
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'),但无济于事。
【问题讨论】:
-
期待答案,上周我有一个 bash 脚本,它可以从终端运行,但不能从 R 中的系统命令运行,但没有花时间调试或将其写成问题. (这是一次性的,所以我懒洋洋地从终端运行它。)
-
假设所有这些都服从
$PATH,$PATH必须不同 - R 中的system("echo $PATH")和 shell 中的echo $PATH是什么?这与pythonwhich的发现一致吗?system("which python")是否与Sys.which("python")相同? -
@Spacedman 很好的建议,而且你正在做一些事情,事实上我的
anaconda2/bin目录在我的 终端$PATH上,但不在已知的路径上R 中的system。鉴于此,我想system('which python')与Sys.which('python')相同也就不足为奇了(从system找到的python没有pandas的事实中基本上可以清楚地看出这一点。附) -
所以问题是:有没有一种非黑客的方式来设置
PATH同步?我显然可以将我在终端中找到的内容复制粘贴到Sys.setenv(PATH=...) -
那么如何启动 RStudio?从菜单?在这种情况下,它会从启动桌面的进程中获取 PATH。从终端命令行启动 RStudio?那应该得到终端的PATH....