使用 rPython import numpy with python 3.5

Using rPython import numpy with python 3.5

我的R版本是3.4.1,python版本是3.5.2,OS是Ubuntu16.04.2

我在安装 rPython 时设置了 RPYTHON_PYTHON_VERSION=3.5,这是我默认的 rPython python 版本。

♥ python.exec('import sys')
♥ python.exec('print(sys.version)')
3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609]

当我通过 rPython 导入 numpy 时(在 python 3.5 中使用 import numpy 没有问题,一切正常。),我得到了这个:

♥ python.exec('import numpy')
Error in python.exec("import numpy") :
Importing the multiarray numpy extension module failed.  Most
likely you are trying to import a failed build of numpy.
If you're working with a numpy git repo, try `git clean -xdf` (removes all
files not under version control).  Otherwise reinstall numpy.

Original error was: /usr/local/lib/python3.5/dist-packages/numpy/core/multiarray.cpython-35m-x86_64-linux-gnu.so: undefined symbol: PyType_GenericNew

但是,如果我设置 RPYTHON_PYTHON_VERSION=2 并重新安装 rPython,import numpy 就会起作用。如何使用 python 3.5 在 rPython 下成功导入 numpy?

首先,您可以将任何包从 R/rPython 导入到 python 3.5.3 吗?

我也遇到了这个问题。我得到的错误与 posters 完全相同(numpy 不会加载)。后来我发现我无法导入任何包。但是,我可以在 python 2.7.13 和 python 3.5.3 中导入包(只是不通过 R/rPython)。这让我相信这是一个 'rPython' R 包错误。以下是我为解决此问题所做的尝试:

1) 我已尝试 installing/reinstalling R 包 rPython 使用 python 2.7.13 或 python 3.5.3。我可以通过重新安装 rPython 包将 R 连接到 python 2.7.13:

install.packages("rPython",lib= "home/myusername/R/x86_64-pc-linux-gnu-library/3.4", configure.vars= "RPYTHON_PYTHON_VERSION=2")

在安装期间使用 "RPYTHON_PYTHON_VERSION=3" 同样允许我将 R 与 python 3.5.3 连接。当 rPython 连接到 python 2.7.13 时,我可以从 R 调用 "import numpy",但当连接到 3.5.3 时则不能。

2) 我已经找到所有之前安装并卸载的 numpy 和 scipy。我为 python 2.7.13 和 python 3.5.3 每个都有几个副本。使用 pip 和 pip3 重新安装并没有解决问题(为了安全起见,我事先重新启动了 R)。

从这两个帐户来看,这似乎是 R 包的问题 'rPython'。您可以尝试 R 中较新的 'reticulate' 包,看看它是否更适合您。但是,在使用网状结构将 R 与 python 连接时,我无法让并行线程工作,不幸的是,这正是我需要做的。然而,线程在使用 'rPython' 时确实工作得很好,但我需要的包需要 python 3+。如果我能够解决它,我将继续进行故障排除并更新此 post。同时,给 'reticulate' 一个机会,它是一个非常整洁的包。

编辑 我能够使用 'reticulate' 包从 python 3.5.3 在 R 中加载 numpy。

EDIT2 对于那些将来发现这个 post 的人,我能找到的唯一解决方案是使用 python3 代码和 R 的多线程使用 system(python3 "path_to_python_script" arg1 arg2 arg3)

调用 python 文件