【问题标题】:Rpy2 Cannot Find R.dll [duplicate]Rpy2找不到R.dll [重复]
【发布时间】:2015-07-04 00:07:16
【问题描述】:

我在 Windows 7 64bit 和 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。

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

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?

【问题讨论】:

标签: python r path rpy2


【解决方案1】:

我多次为这个问题苦苦挣扎,发现一个可能不那么优雅但相当简单的解决方法是整个无法导入 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。

【讨论】:

    【解决方案2】:

    昨晚我制作了一个 rpy2 install pdf 来解决这个问题——在 PATH 中链接的 R、Pyhton、pywin32 或 rpy2 很可能不是 32 位的。

    也许会有所帮助 - rpy2pandas.pdf

    (唯一的问题是我在 C:/Python27/ArcGIS10.2/python.exe 中有 Python,否则其他所有内容都应该移植。)

    【讨论】:

    • 感谢您的回答,但我决定改用 PypeR。无论如何,我尝试使用 pip 和 .whl 文件重新安装 rpy2,并安装了 singledispatch,但问题仍然存在。
    • 哇!我使用的是 R 64 位。真丢人。我从没想过这会是个问题。不过谢谢你解决了这个问题。
    猜你喜欢
    • 2014-10-15
    • 2015-04-06
    • 2012-01-07
    • 2011-07-01
    • 2021-02-06
    • 2016-09-04
    • 1970-01-01
    • 2012-03-14
    • 2015-06-25
    相关资源
    最近更新 更多