python - Rpy2 找不到 R.dll

标签 python r path rpy2

我在 Windows 7 64 位上使用 Python 2.7.9,已安装 R-3.2.0(之前也尝试过 R-2.12.2 和 R-3.1.3,但得到了相同的结果),添加了 C:\Program Files\R\R-3.2.0\bin\i386到系统路径,将 R_HOME 添加为系统变量,值为 C:\Program Files\R\R-3.2.0 ,添加值为“Matt”的 R_USER,并使用 .exe 文件安装 rpy2-2.3.0dev,该文件已安装。

但是,输入 from rpy2 import robjects在 rpy2\rinterface\__init__.py 中给出以下错误:

Traceback (most recent call last):
  File "C:\Python27\rpy2Test.py", line 2, in <module>
    from rpy2 import robjects
  File "C:\Python27\lib\site-packages\rpy2\robjects\__init__.py", line 14, in <module>
    import rpy2.rinterface as rinterface
  File "C:\Python27\lib\site-packages\rpy2\rinterface\__init__.py", line 79, in <module>
    raise RuntimeError("Unable to locate R.dll within %s" % R_HOME)
RuntimeError: Unable to locate R.dll within C:Program Files\R\R-3.2.0

我尝试过复制并粘贴此内容:

if os.path.exists(os.path.join(R_HOME, 'lib')):             ## ADDED ##
    os.environ['PATH'] += ';' + os.path.join(R_HOME, 'bin')    ## ADDED ##
    os.environ['PATH'] += ';' + os.path.join(R_HOME, 'modules')    ## ADDED ##
    os.environ['PATH'] += ';' + os.path.join(R_HOME, 'lib')    ## ADDED ##
else:                                   ## ADDED ##
    os.environ['PATH'] += ';' + os.path.join(R_HOME, 'bin', 'i386')     ## ADDED ##
    os.environ['PATH'] += ';' + os.path.join(R_HOME, 'modules', 'i386') ## ADDED ##
    os.environ['PATH'] += ';' + os.path.join(R_HOME, 'library')     ## ADDED ##

# Load the R dll using the explicit path
# First try the bin dir:
Rlib = os.path.join(R_HOME, 'bin', 'R.dll')
# Try bin/i386 subdirectory seen in R 2.12.0                ## ADDED ##
if not os.path.exists(Rlib):                        ## ADDED ##
    Rlib = os.path.join(R_HOME, 'bin', 'i386', 'R.dll')         ## ADDED ##

进入rinterface\__init__.py,但这什么也没做。

我也尝试将 bin\i386 文件夹中的所有内容复制到 bin 文件夹中,但仍然没有区别。

如何让 rpy2 找到 r.dll?

最佳答案

我多次遇到这个问题,并发现了一个可能不那么优雅但相当简单的解决方法来解决整个无法导入 rpy2 的问题。如果您也厌倦了弄乱环境变量,那么只需将其设置在一个小的 python 脚本中,您可以在开始时导入该脚本。 首先获取rpy2.whl包并按照https://stackoverflow.com/a/32983656/6912069进行安装 然后只需创建一个小的 python 脚本,将其导入到依赖于 rpy2 的其他 python 脚本的开头。 对我来说,这是可行的:

from __main__import *
import os
os.environ['PYTHONHOME'] = 'C:/Program Files/Python'
os.environ['PYTHONPATH'] = 'C:/Program Files/Python/lib/site-packages'
os.environ['R_HOME'] = 'C:/Program Files/R/R-3.5.1'
os.environ['R_USER'] = 'C:/Program Files/Python/Lib/site-packages/rpy2'

# importing rpy2 now throws no errors
import rpy2.robjects as ro

在我的主 python 脚本开头导入此脚本时,我可以使用 rpy2 包并从 Python 中控制 R。

关于python - Rpy2 找不到 R.dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29863535/

相关文章:

python - Python 的 Numpy 库中的复合赋值运算符

python - 加速 Numpy 数组的循环

arrays - R 在多维数组中设置子集和赋值

bash - 在 Ubuntu 16.04 中搞砸了 PATH 环境变量

python - 使用 Peewee 处理数据库断开连接

Python 和 MySQL : Error with simple INSERT

r - Sweave 用户如何与 Word 用户协作?

r - 在连续组上多次使用 setdiff() 而不使用 for 循环

ruby-on-rails - 工头立即终止

input - SSIS:获取先前数据流组件的名称