在Windows 7下从python启动时找不到R包

时间:2012-11-30 09:47:27

标签: python r windows-7 package rscript

我尝试通过python GUI运行R脚本。

在R控制台下,我安装了rgl包。在windows-7中,R在当前用户文件夹下安装包,而不是ProgramFiles \ R ...文件夹。

我有一个简单的demo.r脚本:

library('rgl')
example('plot3d')

如果我使用新安装的rgl包运行demo.r脚本,并使用以下命令行:

"c:\ProgramFiles\R\R..\bin\Rscript.exe" demo.r

完美无缺!

现在,如果我使用以下脚本从python运行它:

import subprocess
out = subprocess.check_output([r"c:\ProgramFiles\R\R..\bin\Rscript.exe", "demo.r"])

我收到错误,告知找不到/安装了rgl。

我检查过如果我的demo.r只包含一个简单的print to screen命令,那就可以了。这意味着从python启动时,Rscript.exe不再知道在用户文件夹下找到rgl包的位置。

如果我将rgl包文件夹从用户文件夹复制到ProgramFiles \ R ...文件夹,那么它可以正常工作。

有谁知道如何指定make python运行R脚本并使用用户文件夹中的包?

由于

2 个答案:

答案 0 :(得分:0)

最好创建一个lanucher.bat,我会使用

R_PATH :C:/ Program Files / R / R-version

DEMO_PATH :您的demo.r路径

@echo off
C:
PATH R_PATH;%path%
cd DEMO_PATH
Rscript demo.R 
exit

您在 LAUNCHER_PATH

中保存了launcher.bat

现在在python:

import subprocess
out = subprocess.check_output('LAUNCHER_PATH\launcher.bat')

PS:如果你在你的python脚本中添加一些args,很容易将它们添加到你的launcher.bat中,而无需更改你的python代码

 Rscript demo.R arg1 arg2

答案 1 :(得分:0)

您需要在子流程中设置R_USER环境变量,R在设置.Library.site时会查看:

import subprocess, os
my_env = os.environ.copy()
my_env["R_USER"] =  my_env["HOMEPATH"]
subprocess.check_output([r"c:\ProgramFiles\R\R..\bin\Rscript.exe", "demo.r"], env=my_env)

请注意my_env["HOMEPATH"]对我有用,因为那是\R\win-library\目录所在的位置。您可能必须使用os.path.join(my_env["HOMEPATH"],"documents")行内的某些内容,具体取决于用户库的位置(有关详细信息,请参阅R中的?library)。在任何语言(Powershell,Node等)的子进程中启动R时都适用相同的逻辑