簡體   English   中英

如何從rJython導入站點包?

[英]How to import a site-package from rJython?

我正在嘗試使用rJython包從R調用針對Python的openopt包中的某些函數。 我在64位Windows 7上為Python 2.7.4安裝了NumPy,SciPy和OpenOpt。從Python導入openopt是可以的。

但是,當我運行代碼時:

library(rJython)
rJython <- rJython(modules='openopt')
rJython$exec("from openopt import GLP")

我有錯誤:

.jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  : 
  Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named openopt

當然,我檢查了Python環境的sys.path值:

rJython$exec("import sys")
rJython$exec("pname = sys.path")
jython.get(rJython, "pname")

但是我得到了:

[1] "C:\\Users\\myname\\Documents\\R\\win-library\\2.15\\rJython\\Lib"            
[2] "C:\\Users\\myname\\Documents\\R\\win-library\\2.15\\rJython\\jython.jar\\Lib"
[3] "__classpath__"                                                                 
[4] "__pyclasspath__/"                                                              
[5] "openopt"                                                                       
[6] "C:/Users/myname/Documents/R/win-library/2.15/rJython" 

這些絕對不像Python本身中的sys.path值。 所以我通過以下方式擴展了sys.path:

rJython$exec("sys.path.extend(['C:\\Python27\\lib\\site-packages\\openopt-0.45-py2.7.egg'])")

然后,似乎我需要將numpy添加到sys.path中:

Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  : 
  Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Python27\lib\site-packages\openopt-0.45-py2.7.egg\openopt\__init__.py", line 10, in <module>
    from oo import *
File "C:\Python27\lib\site-packages\openopt-0.45-py2.7.egg\openopt\oo.py", line 4, in <module>
    from LP import LP as CLP
File "C:\Python27\lib\site-packages\openopt-0.45-py2.7.egg\openopt\kernel\LP.py", line 1, in <module>
    from baseProblem import MatrixProblem
File "C:\Python27\lib\site-packages\openopt-0.45-py2.7.egg\openopt\kernel\baseProblem.py", line 2, in <module>
    from numpy import *
ImportError: No module named numpy

然后,我在rJython中擴展了Python的sys.path列表中的所有內容。 但是我仍然獲得更多信息:

Erro in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  : 
  Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Python27\lib\site-packages\openopt-0.45-py2.7.egg\openopt\__init__.py", line 10, in <module>
    from oo import *
  File "C:\Python27\lib\site-packages\openopt-0.45-py2.7.egg\openopt\oo.py", line 4, in <module>
    from LP import LP as CLP
  File "C:\Python27\lib\site-packages\openopt-0.45-py2.7.egg\openopt\kernel\LP.py", line 1, in <module>
    from baseProblem import MatrixProblem
  File "C:\Python27\lib\site-packages\openopt-0.45-py2.7.egg\openopt\kernel\baseProblem.py", line 2, in <module>
    from numpy import *
  File "C:\Python27\lib\site-packages\numpy\__init__.py", line 154, in <module>
    import add_newdocs
  File "C:\Python27\lib\site-packages\numpy\add_newdocs.py", line 9, in <module>
    from numpy.lib import add_newdoc
  File "C:\Python27\lib\site-packages\numpy\lib\__init__.py", line 4, in <module>
    from type_check import *
  File "C:\Python27\lib\site-packages

好。 主要問題是:看來我無法從站點程序包中導入模塊。 我絕對可以在Python2.7.4中導入基本模塊。 有什么建議嗎?

rJython是一個不調用Python而是Jython的軟件包,這不是一回事。 特別是, Jython程序當前不能使用用C編寫的CPython擴展模塊 ,只能使用純Python的模塊。

這就是為什么不能通過rJython調用NumPy或SciPy的原因。

然而, rPython ,用完全相同的接口rJython確實與真正的Python交互的包。 您應該嘗試一下。

需要注意的是:它目前僅在UNIX(Linux / Mac / ...)環境下運行,而在Windows下不運行。 可以將其安裝在Windows上,並且有一些在該平台上安裝的說明,但是涉及一些腳本的手動配置(本質上是指示要使用的Python版本以及其所在路徑)和編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM