2017-10-27 5 views
1

필자는 Python + Java 통합 코드를 작성하기 위해이 링크에서 작성된 샘플을 가져 왔습니다.Jython/Java 코드에서 Python 패키지 경로를 제공하는 방법은 무엇입니까?

http://www.jython.org/jythonbook/en/1.0/JythonAndJavaIntegration.html 

코드는 다음과 같습니다.

package org.jython.book.interfaces; 

import org.jython.book.interfaces.JythonObjectFactory; 
import org.python.core.Py; 
import org.python.core.PyString; 
import org.python.core.PySystemState; 

public class Main { 

    public static void main(String args[]) { 

     String projDir = System.getProperty("user.dir"); 
     String rootPath = projDir + "/src/org/jython/book/interfaces/"; 
     String modulesDir = projDir + "/src/org/jython/book/interfaces/"; 

     System.out.println("Project dir: " + projDir); 

     PySystemState sysSt = Py.getSystemState(); 
     JythonObjectFactory factory = new JythonObjectFactory(sysSt, BuildingType.class, "Building", "Building"); 

     BuildingType building = (BuildingType) factory.createObject(); 

     building.setBuildingName("BUIDING-A"); 
     building.setBuildingAddress("100 MAIN ST."); 
     building.setBuildingId(1); 

     System.out.println(building.getBuildingId() + " " + 
      building.getBuildingName() + " " + 
      building.getBuildingAddress()); 
    } 

} 

이 코드를 실행하면 python 모듈을 찾지 못했다는 오류가 발생합니다. .py 및 .pyc 파일을 'modulesDir'로 제공된 경로 아래에 보관했습니다.

"the requested module must be contained somewhere on the sys.path"; 그러나이 Java 프로그램에서이 설정 방법을 이해하지 못했습니다. 누군가 도움을 줄 수 있습니까?

Project dir: /Users/eclipsews/PythonJava 
Exception in thread "main" ImportError: No module named Building 

답변

0

안녕하세요.

파이썬 모듈을 사용할 수있는 프로젝트 경로로 초기화되는 "python.path"속성을 명시 적으로 제공하는 PySystemState.initialize 메서드를 추가했습니다. 다음

private static Properties setDefaultPythonPath(Properties props) { 

    String pythonPathProp = props.getProperty("python.path"); 
    String new_value; 

    if (pythonPathProp == null) { 
     new_value = System.getProperty("user.dir") + "/src/org/jython/book/interfaces/";  
    } 

    props.setProperty("python.path", new_value); 
    return props; 
} 

Properties props = setDefaultPythonPath(System.getProperties()); 
PySystemState.initialize(System.getProperties(), props, null); 

이것은 올바른 출력을 생성

module=<module 'Building' from '/Users/eclipsews/PythonJava/src/org/jython/book/interfaces/Building$py.class'>,class=<class 'Building.Buildin 
g'> 
1 BUIDING-A 100 MAIN ST.