0

我想在 Jython 中导入一个 pyc 文件,有人建议我探索 Jython 中的 'pycimport' 模块,但由于这是一个实验性模块,我无法获得任何代码示例,如果有人可以,我会很高兴帮助我用 Java 实现这个模块。

4

2 回答 2

1

为什么要pycimport在 Java 中实现模块?

使用pycimport模块其实很简单,你只需要导入模块,然后你就可以在 pyc-files 中导入模块:

cole:tmp tobias$ cat mymodule.py
def fibonacci(n):
    a,b = 1,0
    for i in range(n):
        a,b = a+b,a
    return a

cole:tmp tobias$ python
Python 2.7 (r27:82508, Jul  3 2010, 21:12:11) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from mymodule import fibonacci
>>> fibonacci(4)
5
>>> fibonacci(5)
8
>>> ^D
cole:tmp tobias$ ls mymodule.*
mymodule.py mymodule.pyc
cole:tmp tobias$ mv mymodule.py xmymodule.pyx
cole:tmp tobias$ jython
Jython 2.5.2rc4 (trunk:7202, Feb 24 2011, 14:31:12) 
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_26
Type "help", "copyright", "credits" or "license" for more information.
>>> import pycimport
>>> from mymodule import fibonacci
>>> fibonacci(4)
5
>>> fibonacci(5)
8
>>> ^D

只是为了表明pycimport确实从 pyc 文件导入:

cole:tmp tobias$ jython
Jython 2.5.2rc4 (trunk:7202, Feb 24 2011, 14:31:12) 
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_26
Type "help", "copyright", "credits" or "license" for more information.
>>> import mymodule
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mymodule
>>> import pycimport              
>>> import mymodule 
>>> mymodule.__file__
'mymodule.pyc'
>>> ^D

正如您所注意到的,该pycimport模块是实验性的。自从我 4 年前写它以来,我认为没有人接触过它。从那时起使用的 Jython 内部发生了一些变化pycimport,因此其中可能存在一些问题。重新访问该代码可能会很有趣,但我不知道我什么时候有时间,所以我不会做出任何承诺。

于 2011-07-14T22:12:01.587 回答
0

我就是这样做的:)

名为shams.pyc的pyc文件位于C:\PyTest\,其对应的.py文件内容如下:

假的.py

class test:

    def call_helloworld(self) :
        return "Hello World"

测试.java

import org.python.core.PyObject;
import org.python.core.PyString;
import org.python.util.PythonInterpreter;

import org.python.core.PyObject;
import org.python.core.PyString;
import org.python.util.PythonInterpreter;
public class test{ 
    public static void main(String[] args) {
        PythonInterpreter interpreter = new PythonInterpreter();
        PythonInterpreter.initialize(System.getProperties(),System.getProperties(), new String[0]); 
        interpreter.exec("import sys");
        interpreter.exec("sys.path.append('C:\\PyTest')"); 
        interpreter.exec("import pycimport");
        interpreter.exec("import shams");
        interpreter.exec("from shams import test");
        PyObject pyClass = interpreter.get("test");
        PyString real_result = (PyString) pyClass.invoke("call_helloworld",pyClass.__call__());
        System.out.println(real_result);
    }
}
于 2011-07-15T05:51:24.283 回答