Python导入错误 - 无法导入名称

时间:2014-01-10 16:09:30

标签: java python pydev jython

全新的Python& Jython的。我正在阅读一个简单的教程,并且正在努力学习基础知识,并且希望能够获得一些见解。

创建一个名为'PythonTest'的PyDev项目,我创建了一个名为test(test.py)的模块,代码看起来像这样

 class test():
     def __init__(self,name,number):
         self.name = name
         self.number = number
     def getName(self):
         return self.name
     def getNumber(self):
         return self.number

然后我创建了一个名为pythonJava的java项目,并在其中创建了三个类。

看起来像这样的ITest.java

package com.foo.bar;

public interface ITest {
    public String getName();

    public String getNumber();

}

TestFactory.java看起来像这样

package com.ngc.metro;

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

public class TestFactory {
    private final PyObject testClass;

    public TestFactory() {
        PythonInterpreter interpreter = new PythonInterpreter();
        interpreter.exec("from test import test");
        testClass = interpreter.get("test");
    }

    public ITest create(String name, String number) {
        PyObject testObject = testClass.__call__(new PyString(name),
                new PyString(name), new PyString(number));

        return (ITest) testObject.__tojava__(ITest.class);
    }
}

最后是Main.java

public class Main {

private static void print(ITest testInterface) {
    System.out.println("Name: " + testInterface.getName());
    System.out.println("Number: " + testInterface.getNumber());
}

public static void main(String[] args) {
    TestFactory factory = new TestFactory();
    print(factory.create("BUILDING-A", "1"));
    print(factory.create("BUILDING-B", "2"));
    print(factory.create("BUILDING-C", "3"));
}

}

当我运行Main.java时,我收到以下错误:

  

线程“main”Traceback中的异常(最近一次调用最后一次):文件   ImportError中的“”,第1行:无法导入名称测试

有人可以告诉我我做错了什么吗?我的印象是我需要两个导入模块(test.py)和一个类“test”

编辑1:

为了避免我的sys.path的简单问题,我从IDLE

获得以下内容
  

Python 3.3.3(v3.3.3:c3896275c0f6,2013年11月18日,21:18:40)[MSC v.1600   win32上的32位(英特尔)]输入“copyright”,“credits”或“license()”   欲获得更多信息。 import sys print(sys.path)['',   'C:\ Python33 \ Lib \ idlelib','C:\ Python33','C:\ Python33 \ Lib',   'C:\ Python33 \ DLLs','C:\ workspace \ myProject \ src',   'C:\ WINDOWS \ SYSTEM32 \ python33.zip',   'C:\ Python33 \ lib中\站点包']

     

来自测试导入测试   t = test.test(1,2)   t.getName()   1

     
    
      

    
  

1 个答案:

答案 0 :(得分:1)

实际上,这似乎是一个PYTHONPATH问题......因为你从IDLE获取它我不能说你的Java环境中实际上是怎样的(并且IDLE使用的是Python,但是在你的运行中你应该使用Java + Jython - 在这种情况下,您可能没有为Jython使用正确的sys.path - 至少我没有看到任何在上面的代码中定义了PYTHONPATH以包含.py文件的路径的地方)。

另外,如果您正在使用Java + Jython,请参阅结尾处的注释:http://pydev.org/manual_101_project_conf2.html,以便在PyDev中配置项目。