JAVA Programing/JEP

JAVA JEP 연동

안녕하세요 씨앤텍 시스템즈 최홍준 연구원입니다.

이번 포스트는 JAVA JEP 연동입니다.

JAVA JEP는 JAVA Programing 하면서 Python 코드를 실행하는 일종의 라이브러리 입니다.

JAVA에서 Python 코드를 실행할 수 있는 방법은 대표적으로 2가지 있습니다.


1. Jython

2. JEP


Jython은 파이썬의 자바 구현으로 파이썬 표준 구현의 이름을 따라 JPython라는 이름을 사용했습니다.

자바 언어로만 작성되었기 때문에, 모든 자바 가상머신에서 동작합니다.

JEP는 Java로 Python interpreter를 구현하여 C / C++ 기반의 library와 호환이 어려웠던 Jython과는 다르게

JNI를 통해 CPython을 호출함으로써 C / C++ 기반의 python Library도 Java상에서 실행이 가능한 프로젝트 입니다.


[ NINIA JEP ]

1. https://github.com/ninia/jep

jep 라이브러리를 다운로드를 진행합니다.

 

ninia/jep

Embed Python in Java. Contribute to ninia/jep development by creating an account on GitHub.

github.com

그림1. Python 버전 호환성

* jep 라이브러리는 Python 2.7 이상부터 정상 작동하므로 Python 버전을 맞춰서 컴퓨터에 설치해야합니다.

 

2. jep 라이브러리 압축을 푼 후에 압축푼 폴더에서 python setup.py build를 실행하여 Java JAR파일을 만들어줍니다. 

Java에서 사용할 Library는 Java폴더에 jep-*.jar로 저장되어 있고 jar파일 안에는 jep라는 폴더에 사용할 수 있는 Class들이 있습니다.

그림2. JEP 라이브러리
그림3. Java jar파일 생성
그림4. build 후 폴더
그림5. java 폴더 파일들
그림6. jep-3.9.0.jar 파일 내부

3. Java Project에 Library 추가

자신의 Java Project에서 Referenced Libraries에 마우스 오른쪽을 눌러 Build Path - Configure Build Path 선택 후

Libraries 탭에 Add External JARs를 눌러 방금 build 했던 jep JAR파일을 선택하고 Apply and Close를 눌러 저장합니다.

그림7. Build Path
그림8. Add External JARs

 

그림9. jep-3.9.0.jar 추가완료

4. JEP Test

import jep.*;

public class Main {
	public static void main(String[] args) throws JepException{
    	Jep jep = new Jep(false,"C:\\ProgramData\\Anaconda3\\Lib\\site-packages");
        jep.eval("Test = 'Hello Wolrd'");
        System.out.println(jep.getValue("Test"));
    }
}

그림10. JEP Test Code
그림11. 출력 값

* 위 코드에서 Jep 메서드 파라미터 값 중 2번째는 3.6 버전 이상부터 보안상의 문제 때문에 pip 모듈 설치 경로를 적어줘야 합니다.

* jep.eval은 Python 코드를 직접 실행하는 메서드 입니다.

* jep.getValue는 Python코드를 실행 한 값을 가져오는 메서드 입니다.

위 사진과 같이 Hello World가 Console창에 나왔다면 Java JEP 연동이 된 상태입니다. 이제 eval메서드에 import pandas 등 C / C++ Python Library를 임폴트 후 실행하시면 됩니다.

 


2020-04-23 수정

java.lang.UnsatisfiedLinkError: no jep in java.library.path의 에러같은 경우는

pip 모듈을 이용하여 jep를 설치를 해주시면 에러가 발생하지 않습니다~!!

 

> pip install jep

 


감사합니다.

 

728x90