【问题标题】:import rpy2.robjects gives "cons memory exhausted"import rpy2.robjects 给出“内存耗尽”
【发布时间】:2021-09-05 22:17:32
【问题描述】:

直到最近,我一直在使用 rpy2 将 R 包加载到运行 Python 内核的 Jupyter 笔记本中,并使用它从 sqlserver 数据库中读取一些数据。几天前,我开始看到这个错误:

import rpy2.robjects as ro
R[write to console]: Error: cons memory exhausted (limit reached?)

出现此错误后,Python 内核崩溃并由 Jupyter 重新启动。我想了解这个错误,它是什么原因造成的,以及为什么在之前运行相同的代码没有错误时会出现它。

这个答案,在 r-devel 上,表明它是由超过最大对象数产生的 R 错误:

[Rd] How to debug: Cons memory exhausted

除此之外,关于此错误的可用信息似乎很少。

错误发生在我的代码的第一行。这一点,以及代码之前运行的事实,让我觉得有些东西正在从以前的会话中缓存。我可以在 R 中导入数据(使用 RStudio),所以我认为这是特定于 Jupyter/rpy2 而不是一般的 R 问题。但它并不特定于这个特定的笔记本——如果我在另一个笔记本上运行上述import,在不同的内核上,我会得到同样的错误。所以我的问题是:

  1. 过量的 R 对象是导致此错误的唯一原因,还是其他原因?
  2. 这可能是缓存问题还是我走错了路?
  3. 这些对象可能缓存在哪里? (我怎样才能安全地清除它们?)

我在远程 Amazon 工作区的 Windows 10 上的 conda venv 中使用 jupyterlab。我没有管理员权限。以下是一些版本:

import session_info
session_info.show()
-----
rpy2                3.4.4
session_info        1.0.0
-----
Click to view modules imported as dependencies
-----
IPython             7.16.1
jupyter_client      6.1.6
jupyter_core        4.6.3
jupyterlab          2.1.5
notebook            6.0.3
-----
Python 3.7.7 (default, May  6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)]
Windows-10-10.0.14393-SP0
-----

搜索 SO 揭示了导入 robjects 可能失败的多种方式,但我只能找到一个关于此特定错误的方法(没有给出答案):

RPY2 3.3.5 Errors on import

切线,似乎这个问题可能是密切相关的:

Is it safe to manually delete all files in pkgs folder in anaconda python?

是否建议定期清除$HOME\AppData\Local\conda\conda\pkgs\cache? (更新:此缓存文件夹中有一些相当大的文件,但清除它们并没有解决问题)。

更新:我在 Spyder 中看到同样的错误,在 venv 之外运行,所以这不是特定于 jupyter。

更新:可以导入 rpy2。一个简单的import rpy2 不会产生错误。

更新:

import rpy2.situation as rps
for row in rps.iter_info():
    print(row)

给予:

    rpy2 version:
    3.4.4
    Python version:
    3.7.7 (default, May  6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)]
    Looking for R's HOME:
        Environment variable R_HOME: None
        InstallPath in the registry: C:\Program Files\R\R-3.6.1
        Environment variable R_USER: None
        Environment variable R_LIBS_USER: None
    R version:
        In the PATH: 
        Loading R library from rpy2: OK
    Additional directories to load R packages from:
    None
    C extension compilation:
        Warning: Unable to get R compilation flags.

rpy2 中没有设置环境变量。这是否意味着 R_NSIZE 未设置,这会导致错误吗?

【问题讨论】:

  • 关于您的错误的信息很少。从它的声音来看,这听起来像是您的机器在启动 R 会话时内存不足。您是否尝试过自己启动 R?哪个版本的 R 连接到您的 python 会话?从外观上看,它们可能已经过时(R 当前运行的是 4.1.0 版本)并且错误可能是版本错误。 rpy2 也有 3.4.5 版本,可能是 3.4.4? 引起的错误。简而言之:也许尝试使用更新的rpy2 版本的新的和更新的 python 和/或 R 版本,看看这是否解决了问题。
  • 谢谢@Oliver。是的,我尝试过自己启动 R(在 R Studio 中) - 没有问题。我不认为这是一个版本问题,因为直到几天前相同的代码运行没有错误,但无论如何我在这个平台上没有管理员权限,所以这不是一个途径我可以探索。
  • 奇怪,当您尝试通过 rpy2 启动 R 会话时,它会立即出现吗?您可能能够将 R 本身安装在您的用户文件夹中(获得过去管理员权限的经典方法)。也很好奇这是否也会使裸 python 会话(非 jupyter)崩溃。不确定这会有所帮助,但很好奇。
  • 该平台受到严格监控。我不确定试图获得隐蔽的管理员权限会增加我的持续就业前景!它确实会导致一个裸 python 会话崩溃(例如在 Spyder 中) - 请参阅我最近的更新 - 所以我猜它不是特定于 jupyter/venv 的。

标签: r jupyter conda rpy2 robjects


【解决方案1】:

我已通过添加系统环境变量来解决此问题:R_HOME、R_USER 和 Path。 [windows10,R 4.1.0,rpy2 3.4.5,python 3.8]

【讨论】:

  • 感谢@cslhb,我没时间解决这个问题,不情愿地重构为非 rpy2 解决方案。不过,我真的很想让它为其他项目工作。你能多说一点吗?您如何确定正确的值是什么,以及在哪里添加它们?到 venv 还是全局?
猜你喜欢
  • 1970-01-01
  • 2014-09-24
  • 2021-11-01
  • 1970-01-01
  • 2015-08-23
  • 2012-11-10
  • 2012-08-19
  • 2011-02-09
  • 2015-10-01
相关资源
最近更新 更多