尝试在Python中运行RPY2并收到错误0X7e

问题描述 投票:0回答:9

我正在尝试运行 RPY2 以利用 R 中的 TTR 包,并运行 python 3.8.3 和 R 4.0.2。但是,当尝试运行代码时

os.environ['R_HOME'] = "C:\\Program Files\\R\\R-4.0.2\\bin\\x64"
from rpy2.robjects.packages import importr'

这会导致:

OSError: cannot load library 'C:\Program Files\R\R-4.0.2\bin\x64\bin\x64\R.dll': error 0x7e

我主动运行了 python -m rpy2.situation,产生了

C:\Users\XXXXX>python -m rpy2.situation
rpy2 version:
3.3.4
Python version:
3.8.3rc1 (tags/v3.8.3rc1:802eb67, Apr 29 2020, 21:39:14) [MSC v.1924 64 bit (AMD64)]
Looking for R's HOME:
    Environment variable R_HOME: None
    InstallPath in the registry: C:\Program Files\R\R-4.0.2
    Environment variable R_USER: None
    Environment variable R_LIBS_USER: None
R version:
R version 4.0.2 (2020-06-22) -- "Taking Off Again"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
https://www.gnu.org/licenses/.

    In the PATH:
    Loading R library from rpy2: OK
Additional directories to load R packages from:
None
C extension compilation:
'sh' is not recognized as an internal or external command,
operable program or batch file.
    Warning: Unable to get R compilation flags.

非常感谢任何有关 RPY2 为何导致此 0x7e 错误的帮助。我还卸载并重新安装了 R 和 RPY2,因为我在其他一些帖子的解决方案中发现了这一点。

python r rpy2
9个回答
3
投票

我在尝试导入 rpy2 库时遇到了同样的问题。当我在环境变量中添加 R 的路径时,我得到了它。

***注册表中的安装路径:C:\Program Files\R\R-4.0.2

尝试使用上述内容在系统环境变量上创建路径,看看是否有效


3
投票

我遇到了同样的错误,对我来说问题是 SciPy 在 rpy2 之前导入。将 SciPy 导入移到 rpy2 下面解决了这个问题。


3
投票

我也遇到了完全相同的问题。原因是python运行在Anaconda环境中。该环境安装了自己的 R 版本。 (也许在您的计算机上搜索“Rcmd.exe”以查看计算机上的所有 R 副本。) 解决方案是将

os.environ['R_HOME']
修改为 R:

的适当副本

对我来说,通过将其添加到我的 python 脚本的顶部来工作:

import os
os.environ["R_HOME"] = "C:\\Users\\<Name>\\anaconda3\\envs\\<enironment_name>\\Lib\\R\\"

但具体路径可能会有所不同,具体取决于您运行 rpy2 的位置。

还要注意,就像 Aidan 提到的那样,您不应该将

\\bin\\x64
添加到 R_HOME 路径。


2
投票

运行

Loading R library from rpy2: OK
时的行
rpy2.situation
表明 R dll 已正确加载。运行 Python 脚本的环境和运行
C:\Users\XXXXX>python -m rpy2.situation
的终端之间可能存在一些不同。

尝试从 Python 脚本运行

rpy2.situation
(例如,获取
if __name__ == '__main__':
块的内容 - https://github.com/rpy2/rpy2/blob/master/rpy2/situation.py#L358


1
投票

在输出中注意:

OSError:无法加载库 'C:\Program Files\R\R-4.0.2 in\x64 in\x64\R.dll':错误 0x7e

您的 R_Home 只需要为“C:\Program Files\R\R-4.0.2”。事实上,删除环境变量的更改就可以了。


1
投票

您需要同时做两件事:

  1. 设置R_HOME
  2. 设置环境“路径”包括“R bin”

例如

#set R_HOME dynamically
import os
os.environ['R_HOME'] = r'YOUR R HOME PATH' #e.g. r'C:\Users\STEMLab\Miniconda2\envs\myenv\Lib\R' for my case
#set R bin
os.environ['path'] += r';YOUR R BIN;' #e.g. r';C:\Users\STEMLab\Miniconda2\envs\myenv\Lib\R\bin;' for my case again

干杯:)


1
投票

我处于完全相同的情况,更改环境变量设置并没有解决问题。我错误地安装了32位python;安装 64 位 python 对我来说效果很好!

您可以通过

查看
import platform; platform.architecture()

1
投票

我设法通过首先使用 ctypes 加载 r.dll 来让 rpy2 (和 pymer4)工作

import ctypes
import os
os.environ["R_HOME"] = r"D:\anaconda3\envs\pymer4\Lib\R"
# Load DLL into memory.

hllDll = ctypes.WinDLL (r"D:\anaconda3\envs\pymer4\Lib\R\bin\x64\R.dll")

import rpy2.robjects as robjects

0
投票

从 Python 3.8 开始,出于安全原因,设置 PATH 不再对解析 DLL 产生影响。相反,在加载之前显式包含 DLL 路径

rpy2
:

import os
os.add_dll_directory(r"path_to_R/bin/x64/")  # E.g., "C:/Program Files/R/R-4.3.1/bin/x64"
from rpy2.robjects.packages import importr'

这个答案有更多细节。

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