설치하기
pip install C:\dev\dev_env\python\JPype1-0.6.1-cp35-none-win_amd64.whl
|
정상적으로 설치 되었는지는 import jpype 로 확인할 수 있습니다.
만약 아래와 같은 오류가 발생한다면 정상적으로 설치 되지 않았을 수 있습니다.
ImportError: DLL load failed: 지정된 모듈을 찾을 수 없습니다.
|
window 환경에서 정상적인 설치 후에도 위와 같은 오류가 발생한 경우라면 Visual C++ 재배포 가능 패키지를 다운로드하여 설치하면 해결된다는 자료가 있어 설치해 보았습니다. 그랬더니 위 오류는 해결되었으나 다른 오류가 발생하였습니다.
ImportError: numpy.core.multiarray failed to import
|
NumPy 가 설치되지 않아서 발생한 오류입니다. wheel 을 이용하여 설치해 줍니다.
pip install "C:\dev\dev_env\python\numpy-1.11.1+mkl-cp35-cp35m-win_amd64.whl"
|
다시 import jpype 를 실행해 보면 정상적으로 import 됨을 확인 할 수 있습니다.
사용하기
기존 Jar 에 있는 Java Class 를 로딩하려면 아래와 같이 진행하면 됩니다.
import os
import jpype as jp
classpath = os.pathsep.join((“jar path”, “jar2 path” …)
jp.startJVM(jp.getDefaultJVMPath(), “-ea”, “-Djava.class.path=%s” % classpath)
j_class = jp.Class(“package.class”)
jc = j_class()
jc.method() # non-static
j_class.static_method() # static
j_package = jp.JPackage(‘package’)
j_class = j_package.className()
jc = j_class()
jc.method() # non-static
j_class.static_method() # static
jp.shutdownJVM()
|
Jpype 사용시 주로 실수하는 부분이 몇 가지 있습니다.
- classpath 파라메터 이름 오타
대/소문자를 구분하기 때문에 오타로 인해 JVM 이 시작되지 못하는 경우가 있습니다. - jar 에 관련된 dependency jar 가 있는 경우 함께 classpath 에 잡아 주어야 합니다.
- java method overloading 이슈
Java 의 경우 동일한 method 이름을 갖고 있더라도 overloading 을 통해 runtime시에 동적으로 method 호출이 이루어집니다.
하지만 Jpype 를 사용할 때에는 그 부분을 확실하게 해 주어야 합니다.
즉, Java method 호출하는 부분에서 파라메터가 String 타입이라면 str() 을 이용하여 명시적으로 타입을 지정해 줄 수 있어야 합니다.
느낀점
테스트 시에 2가지 지점에서 주로 오류가 발생하였고, 상당히 많은 시간을 보냈습니다.
첫 번째가 startJVM 시 오류였고, 두 번째가 Java Class 를 사용하는 부분이었습니다.
그 원인에는 몇가지가 있지만 오류 발생시 노출되는 Stacktrace 로는 상세한 정보를 확인할 수 없어 불편함을 많이 느꼈습니다.
참조
- http://blog.naver.com/PostView.nhn?blogId=tyboss&logNo=70046959025
- http://egloos.zum.com/mcchae/v/10697177
- https://sourceforge.net/p/jpype/discussion/379372/thread/48fb1301/
- http://iacobelli.cl/blog/?p=119
- https://github.com/tcalmant/jpype-py3/issues/18
'Programing > Python' 카테고리의 다른 글
PEP8 이란? (0) | 2016.07.27 |
---|---|
APScheduler 사용기 (0) | 2016.07.26 |
Python Intellij Project 설정시 Django 인식 오류 (0) | 2016.07.14 |
Window 환경에서 Python VirtualEnv 사용하기 (0) | 2016.07.06 |
Python 기초 스터디 자료 (0) | 2016.03.27 |