如何从rJython导入sitepackage?

2024-06-28 20:24:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用rJython包从R调用openopt包中的一些函数。我在64位Windows7上为Python2.7.4安装了NumPy、SciPy和OpenOpt。从Python导入openopt是可以的。在

但是,当我运行代码时:

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

我有错误:

^{pr2}$

我当然查过了系统路径Python环境的值:

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本身。所以我延长了系统路径签署人:

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

那么看来我需要把纽比加到搜索路径公司名称:

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列表。但我还是得到了更多的信息:

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中导入基本模块。有什么建议吗?在


Tags: infrompyimportnumpyegglibpackages
1条回答
网友
1楼 · 发布于 2024-06-28 20:24:17

rJython是一个不调用Python而是调用Jython的包,这不是一回事。特别是,Jython programs cannot currently use CPython extension modules written in C,只有纯Python中的那些。在

这就是为什么NumPy和SciPy都不能通过rJython调用。在

但是,rPython,与rJython具有完全相同接口的包确实与truePython进行交互。你应该试试。在

不过,有一个警告:它目前只在UNIX(Linux/Mac/…)环境下运行,而不是在Windows上。它可以安装在Windows上,也有一些关于在这样的平台上安装它的说明,但是需要手动配置脚本(本质上是为了指明要使用哪个版本的Python以及它所在的路径)和编译。在

相关问题 更多 >