python 3.7.3,rpy2 3.2.0,以下代码:
from rpy2 import robjects
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".virtualenvs/flask3/lib/python3.7/site-packages/rpy2/robjects/__init__.py", line 14, in <module>
import rpy2.rinterface as rinterface
File ".virtualenvs/flask3/lib/python3.7/site-packages/rpy2/rinterface.py", line 6, in <module>
from rpy2.rinterface_lib import openrlib
File ".virtualenvs/flask3/lib/python3.7/site-packages/rpy2/rinterface_lib/openrlib.py", line 65, in <module>
_get_dataptr_fallback)
File ".virtualenvs/flask3/lib/python3.7/site-packages/rpy2/rinterface_lib/openrlib.py", line 50, in _get_symbol_or_fallback
res = getattr(rlib, symbol)
RuntimeError: found a situation in which we try to build a type recursively. This is known to occur e.g. in ``struct s { void(*callable)(struct s); }''. Please report if you get this error and really need support for your case.
这是怎么回事?这看起来像rypy2的标准过程,实际上是我们在python 2下使用它的方式。
同一问题适用于任何类型的rpy2导入:import rpy2.robjects.tests
等。
答案 0 :(得分:2)
我遇到了同样的问题,并在上面链接的@ejolly中发现了同样的问题。为了解决这个问题,我将cffi
库从1.13.0
降级到1.12.3
。
pip install cffi==1.12.3
像魅力一样工作。
答案 1 :(得分:1)
编辑: cffi
1.13.1已发布。只需更新它,一切都可以正常工作。
此问题在cffi
1.13.0中出现,但似乎仅限于ABI模式。
rpy2
将尝试使用API模式,但是如果失败,则会默默地退回到ABI模式。如果您的系统可以配置为具有C编译器,则应安装API模式。要强制使用API模式,请设置环境变量:
RPY2_CFFI_MODE=API
(请参阅文档中的信息框: https://rpy2.github.io/doc/v3.2.x/html/overview.html#install-from-source)