我一直在尝试让 Rpy2 与我的 R 安装兼容时遇到一个真正的问题。我首先尝试安装 rpy2 MSI 软件包,但这似乎不起作用。当我运行推荐的测试时,它给我一个错误,说它找不到 R.dll,因为新的 R 安装(2.11 后)将 DLL 安装到 i386 文件夹中,而 rpy2 找不到它们,因为它在 bin 文件夹而不是 bin/i386 文件夹中查找。
然后我尝试使用 python 附带的命令行工具(distutils)从头开始构建安装。这不起作用,因为 setup.py 声称无法找到 R_home 位置。但我确实发现编辑环境变量(PATH)可能会显示 rpy2 设置在哪里可以找到 R 安装。然后,我对环境进行了一些编辑,添加了指向 bin/i386 目录的“R_home”变量,并在 PATH 变量下创建了一个新条目,指向同一位置。
不幸的是,当它找到 R 路径时,我遇到了这个问题:
running build
running build_py
running build_ext
Traceback (most recent call last):
File "setup.py", line 372, in <module>
[os.path.join('doc', 'source', 'rpy2_logo.png')])]
File "C:\Python26\lib\distutils\core.py", line 152, in setup
dist.run_commands()
File "C:\Python26\lib\distutils\dist.py", line 975, in run_commands
self.run_command(cmd)
File "C:\Python26\lib\distutils\dist.py", line 995, in run_command
cmd_obj.run()
File "C:\Python26\lib\distutils\command\build.py", line 134, in run
self.run_command(cmd_name)
File "C:\Python26\lib\distutils\cmd.py", line 333, in run_command
self.distribution.run_command(command)
File "C:\Python26\lib\distutils\dist.py", line 994, in run_command
cmd_obj.ensure_finalized()
File "C:\Python26\lib\distutils\cmd.py", line 117, in ensure_finalized
self.finalize_options()
File "setup.py", line 111, in finalize_options
config += get_rconfig(r_home, about)
File "setup.py", line 264, in get_rconfig
rc = RConfig.from_string(rconfig)
File "setup.py", line 252, in from_string
+ '\nin string\n' + string)
ValueError: Invalid substring in string
因此,我重新尝试使用预制安装,认为对环境的新编辑可能会起作用,但在这里遇到了这个问题
Traceback (most recent call last):
File "<string>", line 245, in run_nodebug
File "C:\Documents and Settings\User\Desktop\rpy2-2.1.9\rpy\tests.py", line 3, in <module>
import rpy2.robjects.tests
File "C:\Python26\lib\site-packages\rpy2\robjects\__init__.py", line 12, in <module>
import rpy2.rinterface as rinterface
File "C:\Python26\lib\site-packages\rpy2\rinterface\__init__.py", line 56, 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-2.12.1\bin\i386
这真的很奇怪,因为(任何人都可以检查自己的安装)R 将 R.dll 安装到“C:\Program Files\R\R-2.12.1\bin\i386”中,并且我已经检查并验证了它的在那里,我已将 rpy2 指向 Windows 默认路径中的这个目录!我知道 rpy2 正在寻找正确的位置,但无法理解为什么它没有看到 R.dll。
那为什么rpy2找不到呢?有谁知道如何让 rpy2 与 R 2.12 一起工作?也许我应该尝试更新的 rpy2 2.2.0 版本?不过它仍在开发中,根据这个,1.9 应该能够处理 R 2.12website所以我不知道该怎么办...
感谢任何可以提供帮助的人...
[编辑]我也尝试过这些说明here但它们返回相同的“找不到 DLL”错误...除非您更改环境变量“R_home”以直接指向 c/program files/R/R 2.12 目录而不是 i386 子目录。
如果它指向正确的位置,您就会收到这些错误。这看起来更有希望......但它仍然很糟糕!
.......................F....................................F.FFF...F....................................................................F..................................
======================================================================
FAIL: testNewWithoutInit (rpy2.rinterface.tests.test_SexpVector.SexpVectorTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python26\lib\site-packages\rpy2\rinterface\tests\test_SexpVector.py", line 43, in testNewWithoutInit
self.assertTrue(False) # worked when tested, but calling endEmbeddedR causes trouble
AssertionError
======================================================================
FAIL: testCallErrorWhenEndedR (rpy2.rinterface.tests.test_EmbeddedR.EmbeddedRTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python26\lib\site-packages\rpy2\rinterface\tests\test_EmbeddedR.py", line 122, in testCallErrorWhenEndedR
self.assertTrue(False) # worked when tested, but calling endEmbeddedR causes trouble
AssertionError
======================================================================
FAIL: testReadConsoleWithError (rpy2.rinterface.tests.test_EmbeddedR.EmbeddedRTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python26\lib\site-packages\rpy2\rinterface\tests\test_EmbeddedR.py", line 117, in testReadConsoleWithError
self.assertTrue(errorstring.startswith('Traceback'))
AssertionError
======================================================================
FAIL: testSetReadConsole (rpy2.rinterface.tests.test_EmbeddedR.EmbeddedRTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python26\lib\site-packages\rpy2\rinterface\tests\test_EmbeddedR.py", line 97, in testSetReadConsole
self.assertEquals(yes.strip(), res[0])
AssertionError: 'yes' != ''
======================================================================
FAIL: testSetWriteConsole (rpy2.rinterface.tests.test_EmbeddedR.EmbeddedRTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python26\lib\site-packages\rpy2\rinterface\tests\test_EmbeddedR.py", line 36, in testSetWriteConsole
self.assertEquals('[1] "3"\n', str.join('', buf))
AssertionError: '[1] "3"\n' != ''
======================================================================
FAIL: testWriteConsoleWithError (rpy2.rinterface.tests.test_EmbeddedR.EmbeddedRTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python26\lib\site-packages\rpy2\rinterface\tests\test_EmbeddedR.py", line 55, in testWriteConsoleWithError
self.assertTrue(errorstring.startswith('Traceback'))
AssertionError
======================================================================
FAIL: testVectorUnicodeCharacter (rpy2.robjects.tests.testNumpyConversions.NumpyConversionsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python26\lib\site-packages\rpy2\robjects\tests\testNumpyConversions.py", line 54, in testVectorUnicodeCharacter
self.assertTrue(False) # arrays of unicode characters causing segfault
AssertionError
----------------------------------------------------------------------
Ran 172 tests in 0.407s
FAILED (failures=7)
Exit code: True