8

RのインストールでRpy2をうまく機能させようとして、私は本当の問題を抱えていました。最初に rpy2 MSI パッケージをインストールしようとしましたが、うまくいかないようでした。推奨されるテストを実行すると、R.dll が見つからないというエラーが表示されました。これは、新しい R インストール (2.11 以降) が DLL を i386 フォルダーにインストールするためです。 bin/i386 フォルダーではなく bin フォルダーを探しています。

次に、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 のデフォルト PATH のこのディレクトリに指定しました。rpy2 が適切な場所を探しているという事実は知っていますが、なぜ R.dll が表示されないのか理解できません。

では、なぜ rpy2 はそれを見つけられないのでしょうか? また、rpy2 を R 2.12 で動作させる方法を知っている人はいますか? おそらく、新しい rpy2 2.2.0 バージョンを試す必要がありますか? まだ開発中ですが、このWebサイトによると、1.9はR 2.12を処理できるはずなので、どうすればよいかわかりません...

助けてくれる人に感謝します...

[編集]ここでもこれらの手順を試しましたが、同じ「DLLが見つかりません」というエラーが返されます...環境変数「R_home」をc/program files/R/Rを直接指すように変更しない限りi386 サブディレクトリではなく、2.12 ディレクトリに移動します。

正しい場所を指している場合、これらのエラーが返されます。これはもう少し有望に見えます...しかし、それでもかなり悪いです!

.......................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
4

3 に答える 3

19

Web で何時間も検索し、さまざまなことを試した後、特に上記と同じ問題に遭遇しましたが、ついに Windows 7 コンピューターで Rpy2 が動作するようになりました!

基本的に、重要なヘルプは次のスレッドから得られました: http://www.mail-archive.com/rpy-list@lists.sourceforge.net/msg03348.html

要約すると、これらは Windows7 で rpy2 を起動して実行するための手順でした。

  1. このリンクから rpy2 をインストールします: https://bitbucket.org/breisfeld/rpy2_w32_fix/issue/1/binary-installer-for-win32
  2. R.dll へのパスを環境変数 PATH (私の場合は C:\Program Files\R\R-2.12.1\bin\i386) に追加します。
  3. 環境変数 R_HOME を追加します (私の場合は C:\Program Files\R\R-2.12.1 )
  4. 環境変数 R_USER を追加します (単に Windows での私のユーザー名)
  5. Python IDE を再起動します (そうしないと、環境変数が再読み込みされません!)
于 2012-08-26T13:09:59.433 に答える
4

RPy2はWindowsではテストされていません。Windowsインストーラーで古いバージョン(2.0.8)を使用してみることができますが、新しいバージョンのRでは問題が発生する可能性があります。

作者はWindowsを使用していません。新しいバージョンをWindowsで動作させるための知識があれば、彼は貢献を歓迎すると確信しています。

于 2011-02-21T17:36:44.510 に答える
3

コメントできない (評判ポイントがない) ため、どこにこれを書いたらよいかわかりませんが、この問題に関する有益な情報だと思います。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 レベルのすぐ上まで残すことでこれを修正します。

于 2013-12-31T00:08:33.877 に答える