我一直有一个真正的问题,试图使我的R安装Rpy2发挥很好。 我第一次尝试安装rpy2 MSI包,这似乎并没有工作。 当我运行推荐的testing,它给我一个错误,说它无法findR.dll,因为新的R安装(2.11后)将DLL安装到一个i386文件夹,其中rpy2无法find它们,因为它在bin文件夹而不是bin / i386文件夹中查找。
然后,我尝试使用Python中包含的命令行工具(distutils)从头开始构build安装。 这没有奏效,因为setup.py声称无法findR_home位置。 但是我确实知道编辑环境variables(PATH)可能会显示rpy2安装程序在哪里可以findR安装。 然后,我对环境进行了一些编辑,添加了指向bin / i386目录的“R_home”variables,并在PATHvariables下创build了一个新条目,指向同一个位置。
不幸的是,当它findRpath时,我得到了这个问题:
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
所以我回到试图使用premade安装,认为也许新的编辑环境可能工作,但在这里得到这个问题
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”,我已经检查并validation其在那里,我已经指出rpy2到这个目录的Windows默认path! 我知道一个事实,rpy2正在寻找正确的地方,但不明白为什么它看不到R.dll。
那为什么rpy2找不到呢? 有没有人知道一种方法来获得rpy2 R 2.12的工作? 也许我应该尝试更新的rpy2 2.2.0版本? 它仍然在开发,而1.9应该能够处理R 2.12根据这个网站,所以我不知道该怎么办…
感谢任何能帮助你的人
[编辑]我也试过这些指令在这里,但他们返回相同的“无法findDLL”的错误…除非你改变环境variables“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
在网上搜索了好几个小时并尝试了很多不同的东西之后,我遇到了和上面一样的问题,终于让Rpy2在我的Windows 7电脑上工作了!
基本上,关键的帮助来自这个线程: http : //www.mail-archive.com/rpy-list@lists.sourceforge.net/msg03348.html 。
总结起来,这些是在Windows7上启动并运行rpy2的步骤:
RPy2未在Windows上进行测试。 您可以尝试在Windows安装程序中使用旧版本 (2.0.8),但是在R的较新版本中可能会遇到问题。
作者不使用Windows。 如果你已经掌握了在Windows上获得更新版本的知识,那么我相信他会很欢迎。
我不知道在哪里写这个,因为我不能评论(没有声望点),但感觉这是对这个问题有用的信息。 加重“无法找到R.dll内…”错误消息的原因,甚至当您知道R.dll位于其所在的位置时,该程序实际上并不在该目录中查找。 我认为相关的操作发生在rpy2的“ init .py”模块中:
import win32api os.environ['PATH'] += ';' + os.path.join(R_HOME, 'bin', _win_bindir) os.environ['PATH'] += ';' + os.path.join(R_HOME, 'modules', _win_bindir) os.environ['PATH'] += ';' + os.path.join(R_HOME, 'lib') # Load the R dll using the explicit path R_DLL_DIRS = ('bin', 'lib') # Try dirs from R_DLL_DIRS for r_dir in R_DLL_DIRS: Rlib = os.path.join(R_HOME, r_dir, _win_bindir, 'R.dll') if not os.path.exists(Rlib): continue win32api.LoadLibrary( Rlib ) _win_ok = True break # Otherwise fail out! if not _win_ok: raise RuntimeError("Unable to locate R.dll within %s" % R_HOME)
正如你所看到的,这个错误信息总是说它正在寻找你设置为R_HOME的任何目录,但是它实际上正在目录“R_HOME \ r_dir \ win_bindir”中查找。 所以当你看到“无法在C:\ Program Files \ R \ R-2.12.1 \ bin \ i386中找到R.dll”的消息时,那是因为它实际上是在寻找一个名为C:\ Program Files \ R \ R-2.12.1 \ bin \ i386 \ R-2.12.1 \ bin \ i386 \,或类似的东西。
Kadee答案中的第3点通过将指定的路径只保留在\ bin级别之上来解决这个问题。