如何从rJython导入site

编程入门 行业动态 更新时间:2024-10-24 06:34:05
如何从rJython导入site-package?(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

好。 主要问题是:好像我无法从site-packages导入模块。 我绝对可以在Python2.7.4中导入基本模块。 有什么建议吗?

I am trying to call some functions in openopt package for Python from R using the rJython package. I have the NumPy, SciPy, and OpenOpt installed for Python 2.7.4 on my 64 bit windows 7. Importing openopt from Python is OK.

However, when I run the codes:

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

I got errors:

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

Of course I checked the sys.path values for the Python environment:

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

but I got:

[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"

These are absolutely not like the values of sys.path in Python itself. So I extended the sys.path by:

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

Then it seems that I need to add the numpy to 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

I then extended everything in the sys.path list of Python in rJython. But I still get further information:

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

OK. The main question is: it seems like I cannot import a module from the site-packages. I can absolutely import basic modules in Python2.7.4. Any suggestion?

最满意答案

rJython是一个不调用Python而是调用Jython的包 ,它不是完全相同的东西。 特别是, Jython程序当前不能使用用C编写的CPython扩展模块 ,只能用于纯Python。

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

但是, rPython是一个与rJython完全相同的接口,它与真正的 Python交互。 你应该试试。

但有一点需要注意:它目前只能在UNIX(Linux / Mac / ...)环境中运行,而不能在Windows上运行。 可以在Windows上安装它,并且有一些说明可以在这样的平台上安装它,但是需要一些脚本的手动配置(本质上,用于指示要使用哪个版本的Python及其所在的路径)和汇编。

rJython is a package that does not call Python but Jython, which is not exactly the same thing. In particular, Jython programs cannot currently use CPython extension modules written in C, only those in pure Python.

This is why neither NumPy nor SciPy can be invoked via rJython.

However, rPython, a package with exactly the same interface as rJython does interact with the true Python. You should try that.

There is a caveat, though: it currently only runs on UNIX (Linux/Mac/...) environments, not on Windows. It is possible to have it installed on Windows and there are some instructions as to install it on such platform, but involves some manual configuration of scripts (essentially, to indicate which version of Python is to be used and the path where it is located) and compilation.

更多推荐

本文发布于:2023-07-15 21:57:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1119329.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:rJython   site

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!