-
파이썬 이클립스에 연동하기!코딩/AI 2020. 12. 3. 02:36반응형
도서 대여 웹페이지를 제작하는 프로젝트에서 도서 추천 기능을 기계 학습을 이용하여 제작하고 싶었다.
그러기 위해서 파이썬으로 만든 모델을 이클립스에 연동시켜야 하는 문제가 발생하였다.
jep를 사용해서 어찌어찌 돌아만 가게 만들었지만, 연동 과정에서의 발생한 오류를 고치는 데 3일정도 걸린 것 같다...
1. jep를 선택한 이유
이클립스에 파이썬 코드를 돌리는 여러 방법이 존재한다. 대표적으로 jython이랑 jep가 있다고 한다.
하지만 jython은 python2.7버전 이후에 업데이트가 없다고 한다. 나는 python 3.6버전을 사용하기 때문에 나중에 문제가 발생할 것 같아 jep를 선택했다.
Java에서 python 사용하기
dwt계산을 지원하는 python library인 PyWavelets을 사용해보자. > Java에서 PyWavelets(=pywt)을 사용하기 1. using Jython Jython 을 이용하는 경우 python을 불러올 수 있는데, pywt 패키지 내부에 _extensions..
java8.tistory.com
2. jep 설치
먼저 밑의 페이지에서 jep를 다운받는다.
ninia/jep
Embed Python in Java. Contribute to ninia/jep development by creating an account on GitHub.
github.com
압축을 푼 이후 jep-master 파일 위치의 명령 프롬프트에서 python setup.py build를 실행한다.
** 여기서 오류가 컴파일 오류가 발생했다.
-> C++ 컴파일러가 없어서 발생하는 오류였다. 이때 visual studio에서 컴파일러를 받아주면 오류는 해결된다.
이 때 2017 또는 2019버전으로 설치했을 때 오류가 해결되지 않았다.
그래서 2015버전을 설치하는 것을 추천한다.
m.blog.naver.com/n_jihyeon/221092807806
Visual Studio 2017버전 말구 2015버전 설치하는 법! 초보가 비주얼 스튜디오 설치할 때 주의할 점!
C언어 코딩 도장이라는 책을 보고있는데효 책 내용은 젠젠부 2015 버전을 기준으로 작성되어있더군요 ^_^ ...
blog.naver.com
공식 사이트가 아닌 위의 링크로 들어가서 첨부파일을 다운받으면 된다.
위의 화면에서 Common Tools for Visual C++ 2015만 설치하면 된다.
그래도 오류가 해결되지 않을 경우 pip upgrade를 추천한다!
python setup.py test 명령어를 입력해서 제대로 돌아가는지 확인하자!
성공했다면 jep-master\build\java경로에 jep-3.9.1.jar 파일이 생성된 것을 볼 수 있다.
참조: cntechsystems.tistory.com/70
JAVA JEP 연동
안녕하세요 씨앤텍 시스템즈 최홍준 연구원입니다. 이번 포스트는 JAVA JEP 연동입니다. JAVA JEP는 JAVA Programing 하면서 Python 코드를 실행하는 일종의 라이브러리 입니다. JAVA에서 Python 코드를 실행
cntechsystems.tistory.com
3. 이클립스와 연동
jep-3.9.1.jar 파일을 이제 이클립스에 추가한다.
이 때, 파일은 Web Content 폴더가 아닌 다른 폴더에 들어가야 한다. -> 라이브러리를 찾을 수 없다는 에러가 발생했었다.
++ Tomcat은 WebContent/WEB-INF/lib 경로에 저장한다.
프로젝트 우클릭 -> propperites -> java build path -> add jars 버튼을 클릭하여 받은 파일을 추가한다.
또 properties -> Deployment Assembly에서 add -> java build path entries -> jep-3.9.1.jar 클릭하여 추가해주어야 한다.
4. 실행
이제 준비 끝!
파일 하나 생성하여 코드를 작성하고 돌리면 된다.
나는 미리 만들어놓은 모델을 이클립스로 가져와서 돌리는 형식으로 만들었다.
jep.eval("") : 괄호 안의 파이썬 코드를 실행해준다.
jep.getValue(""): 변수의 값을 가져온다. 변수의 데이터형은 다음과 같다.
잘 돌아가는 것을 확인할 수 있다.
<추가적인 문제>
- 1) jep.close()
jep 객체를 중복으로 생성할 시 오류가 발생한다.
(JEP THREAD WARNING: Unsafe reuse of thread main for another Python sub-interpreter.)
jep.close() 명령어를 사용해도 기존에 생성되었던 객체가 완벽하게 종료되지 않는 것 같다.
jep 객체를 정적변수로 설정하여 단 한번만 생성하고, 계속 그 객체를 사용하는 식으로 해결하긴 했지만...
나중에 제대로 닫는 방법을 찾아 고쳐야 될 것 같다.
** 2020/12/18 오류 해결!
import tensorflow -> 이부분 때문에 jep.close()가 제대로 작동하지 않았다.
SharedInterpreter를 사용하면 해결할 수 있다.
SharedInterpreter jep = new SharedInterpreter()
참고: github.com/ninia/jep/issues/180
Issue With Keras · Issue #180 · ninia/jep
OS Platform, Distribution, and Version: Mac OSX Python Distribution and Version: 3.7 Java/Scala Distribution and Version: 2.11.8 (Scala) Jep Version: 3.8.2 Python packages used (e.g. numpy, pandas,...
github.com
- 2) kkma()
꼬꼬마 형태소 분석기를 사용하도록 만들었는데...
A fatal error has been detected by the Java Runtime Environment:
에러가 난다....
그래서 kkma()를 제외하는 것으로 끝내긴 했지만 살짝 아쉽다.
반응형