Jython을 사용하여 Java에서 Python 실행
- Jython을 사용하여 Java에서 Python 실행
- Jython 라이브러리 설치
- IDE와 Jython 라이브러리 연결
- Java로 Python 코드 작성 및 컴파일
- Java로 컴파일된 두 개의 숫자를 추가하는 Python 코드
- Java로 컴파일된 달의 마지막 날을 찾는 Python 코드
- Java로 컴파일할 때 실행되지 않는 일부 Python 라이브러리
- 결론
이 기사에서는 Jython 라이브러리를 사용하여 Java 프로그램에서 Python을 실행하는 단계를 철저히 설명합니다. 많은 이미지가 있는 자세한 단계별 프로세스이므로 “그가 어떻게 했는지"에 대해 걱정할 필요가 없습니다.
Jython을 사용하여 Java에서 Python 실행
Java에서 Python을 실행하려면 세 가지 전제 조건이 필요합니다.
- 파이썬 코드.
- 자이썬 라이브러리.
- Jython 라이브러리를 연결할 수 있는 IDE.
파이썬 코드 생성
두 개의 숫자를 더하는 메서드를 호출하는 간단한 파이썬 프로그램을 살펴보겠습니다. 메서드 add()
에는 두 개의 매개변수가 있으며 이 두 매개변수의 합을 반환하고 인쇄합니다.
def add(a, b):
s = a + b
return s
print(add(5, 6))
이 프로그램을 실행하면 a
와 b
의 합계가 인쇄됩니다.
내장 라이브러리를 사용하는 다른 파이썬 프로그램을 살펴보겠습니다. 이 프로그램은 주어진 달의 마지막 날을 찾기 위해 datetime
내장 라이브러리를 사용합니다.
import datetime
def last_day_of_month(date):
if date.month == 12:
return date.replace(day=31)
return date.replace(month=date.month + 1, day=1) - datetime.timedelta(days=1)
print(last_day_of_month(datetime.date(2022, 12, 25)))
이 프로그램의 마지막 줄에서 last_day_of_month
메서드로 날짜를 보내고 해당 월의 마지막 날을 반환하고 인쇄합니다.
코드에서 타사 라이브러리를 사용하는 다른 프로그램도 고려해 보겠습니다.
from datetime import datetime
import pandas as pd
def check_month_end(date):
return date + pd.offsets.MonthEnd(0) # == date
print(check_month_end(datetime(2005, 2, 6)))
print(check_month_end(datetime(2004, 2, 29)))
이 프로그램은 코드 내에서 pandas
를 사용합니다. Java 프로그램에서 Python을 실행하는 데 사용할 코드가 준비되었으므로 Jython을 설치하는 방법을 알아보겠습니다.
Jython 라이브러리 설치
Jython은 Python 코드 자체가 Jython에서 실행되고 지원되지 않는 C 확장을 사용하지 않는 경우 Java 코드에서 Python 함수를 간단하게 호출할 수 있도록 합니다.
의심 할 여지없이 그것이 당신에게 효과가 있다면 찾을 수있는 가장 간단한 대답입니다. 그렇지 않은 경우 org.python.util.PythonInterpreter
구문을 지원하는 새로운 Java6 인터프리터를 사용할 수 있습니다.
Jython 라이브러리는 여기에서 다운로드할 수 있습니다. 독자는 독립 실행형 라이브러리 버전을 다운로드해야 IDE와 쉽게 연결할 수 있습니다.
패키지가 컴퓨터에 설치됩니다. 다운로드되는 경로를 기록해 두십시오.
대부분의 컴퓨터에서는 기본 라이브러리 내의 “다운로드"에서 찾을 수 있습니다.
IDE와 Jython 라이브러리 연결
IDE를 사용하는 것이 현재 표준이며 그렇지 않은 경우 독자는 IDE로 전환해야 합니다. 이 문서에서는 Java 코드를 실행하는 데 널리 사용되는 소프트웨어인 IntelliJ IDE의 단계를 자세히 보여줍니다.
독자가 이전에 IntelliJ를 사용한 적이 없더라도 걱정하지 마십시오. 모든 것이 처음부터 다뤄질 것입니다.
먼저 여기에서 IntelliJ를 설치합니다. IntelliJ를 설치하고 사용할 준비가 되면 새 프로젝트를 만들어야 합니다.
프로젝트는 이 기사에서 데모에 필요한 파일을 위한 별도의 공간을 만듭니다. 그러면 프로젝트가 Jython 라이브러리에 연결되어 Java에서 Python을 실행할 수 있습니다.
-
IntelliJ IDE 내에서 새 프로젝트 만들기
IntelliJ IDE를 열고 ‘새 프로젝트’를 클릭합니다. 프로젝트가 이미 열려 있으면 파일>새로 만들기>프로젝트로 이동합니다.
-
언어 선택
이 단계에서는 프로젝트에 적합한 언어를 선택해야 합니다. 추가 패키지가 없는 Java 언어를 선택합니다(Groovy 및 Kotlin 체크박스 모두 선택하지 않은 상태로 유지해야 함).
대화 상자 상단의 ‘Project SDK’에는 Java 버전이 표시됩니다. 아무 것도 표시되지 않으면 맨 오른쪽에 있는 작은 삼각형을 클릭하여 새 항목을 다운로드합니다.
-
명령줄 프롬프트 활성화
‘명령줄 앱’을 활성화하려면 확인란을 선택하고 다음을 클릭합니다.
-
프로젝트 이름 지정
프로젝트에 적절한 이름을 지정하십시오. 이 경우 프로젝트 이름은
Python_in_Java
입니다.마침을 클릭하면 새 프로젝트가 생성됩니다.
-
IntelliJ IDE에서 생성된 프로젝트에 Jython 라이브러리 추가
새로운 프로젝트가 생성되면 아래 그림과 같은 모습이 됩니다. 몇 가지 표준 코드가 포함된
main
클래스 파일이 있습니다.이제 Jython을 여기에 연결하려면 파일>프로젝트 구조로 이동합니다. 새 대화 상자가 나타납니다.
라이브러리 섹션 내에서
+
아이콘을 클릭하고 메뉴에서 ‘Java’를 선택합니다.Java를 선택하면 컴퓨터에서 파일을 탐색할 수 있는 새 대화 상자가 로드됩니다. 이제 다운로드한 독립 실행형 자이썬 파일의 경로를 기억해야 합니다.
다운로드한
.jar
파일을 선택하고 확인을 클릭합니다.다시 확인을 클릭하면
Jython Standalone.jar
이 로드되고 라이브러리 창 안에 표시됩니다. 마지막으로 확인을 눌러 로딩을 마칩니다.Jython이 이 라이브러리에 로드되므로 이제 쉽게 코드를 작성하고 Java 프로그램에서 Python을 실행할 수 있습니다.
Java로 Python 코드 작성 및 컴파일
프로젝트가 생성되고 Jython 라이브러리와 연결되면 Java에서 Python을 실행하도록 Java 코드를 작성할 수 있습니다.
Java 프로그램은 Jython 라이브러리의 PythonInterpreter
하위 기능을 사용하여 JVM(Java Virtual Machine) 내부의 내부 인터프리터를 시작합니다.
Jython 라이브러리는 Python 2.7만 지원합니다. 최신 Python 버전이 필요한 스크립트는 Python 코드를 캡슐화하고 다른 언어 내에서 실행하는 마이크로 웹 서비스를 지원할 수 있지만 복잡하고 긴 프로세스가 될 수 있습니다.
Jython은 최종 사용자가 응용 프로그램의 기능을 확장하는 간단하거나 복잡한 스크립트를 만들 수 있도록 Jython 라이브러리를 시스템에 통합하려는 Java 프로그래머에게 가장 적합합니다.
마지막으로 Python 애플리케이션은 Java 애플리케이션보다 2~10배 더 짧습니다. 이는 프로그래머의 생산성에 직접적인 영향을 미칩니다.
Python과 Java는 잘 통신하므로 프로그래머가 제품 개발 및 컴파일 중에 두 언어를 자유롭게 혼합할 수 있습니다.
먼저 Python을 Java로 실행하는 Java 프로그램을 만들어야 합니다.
package com.company;
import org.python.util.PythonInterpreter;
public class Main {
public static void main(String[] args) {
PythonInterpreter pythonInterpreter = new PythonInterpreter();
pythonInterpreter.exec(""); // <--Python codes must be written inside this double quotes
}
}
위의 코드가 무엇을 하는지 이해해 봅시다.
-
코드의 첫 번째 줄은 Java 프로그램용 표준 IntelliJ 헤더입니다.
-
Jython의
PythonInterpreter
하위 패키지를 두 번째 줄에 가져옵니다. -
Main
클래스가 정의됩니다. Java를 처음 사용하는 경우 모든 Java 프로그램에는 적어도 내부에 하나의 클래스가 있음을 알고 있어야 합니다. -
클래스 내부에
main
메서드가 정의되어 있습니다. 이 프로그램은 복잡성을 줄이기 위해 함수를 만들지 않고 기본 메서드로 바로 이동합니다. 클래스 이름은Main
메서드와 동일하지만 항상 필요한 것은 아닙니다.모든 이름은 일부 명명 규칙에 따라 클래스 이름이 될 수 있습니다.
-
PythonInterpreter
의 인스턴스가pythonInterpreter
로 생성됩니다. 이러한 인스턴스는 Java에서 개체라고 하며 생성 후 기본 함수 내에서 가져온 함수를 호출하는 데 사용할 수 있습니다. -
마지막으로
pythonInterpreter.exec();
내부에 코드가 작성됩니다. 큰따옴표를 사용하는 구문.PythonInterpreter
클래스 이름이 암시하는 것과는 달리 우리의 Python 코드는 해석되지 않습니다.JVM은 Jython에서 Python 프로그램을 실행합니다. 따라서 실행하기 전에 먼저 Java 바이트코드로 변환합니다.
Jython은 Python의 Java 버전이지만 기본 Python과 동일한 하위 패키지가 모두 없을 수 있습니다.
이제 Jython 사용법을 충분히 이해했습니다. 이 기사의 시작 부분에서 준비한 Python 코드를 테스트해 보겠습니다.
Java로 컴파일된 두 개의 숫자를 추가하는 Python 코드
Python 코드는 IntelliJ IDE에서 복사하여 붙여넣을 때 큰따옴표 안에 자동으로 정렬됩니다.
package com.company;
import org.python.util.PythonInterpreter;
public class Main {
public static void main(String[] args) {
PythonInterpreter pythonInterpreter = new PythonInterpreter();
pythonInterpreter.exec("def add(a, b):\n"
+ " s = a + b\n"
+ " return s\n"
+ "\n"
+ "print(add(5, 6))");
}
}
출력:
C:\java-1.8.0-openjdk-1.8.0.322-2.b06.dev.redhat.windows.x86_64\bin\java.exe ...
11
Java로 컴파일된 달의 마지막 날을 찾는 Python 코드
두 번째 프로그램에서는 기본 Python 라이브러리를 사용하여 월의 마지막 날을 찾았습니다. 아시다시피 Python Interpreter는 datetime
라이브러리를 사용할 수 있지만 모든 기본 라이브러리를 로드하지 않습니다.
package com.company;
import org.python.util.PythonInterpreter;
public class Main {
public static void main(String[] args) {
PythonInterpreter pythonInterpreter = new PythonInterpreter();
pythonInterpreter.exec("import datetime\n"
+ "\n"
+ "\n"
+ "def last_day_of_month(date):\n"
+ " if date.month == 12:\n"
+ " return date.replace(day=31)\n"
+ " return date.replace(month=date.month + 1, day=1) - datetime.timedelta(days=1)\n"
+ "\n"
+ "\n"
+ "print(last_day_of_month(datetime.date(2022, 12, 25)))\n");
}
}
출력:
C:\java-1.8.0-openjdk-1.8.0.322-2.b06.dev.redhat.windows.x86_64\bin\java.exe ...
2022-12-31
Java로 컴파일할 때 실행되지 않는 일부 Python 라이브러리
Java가 가져올 수 없는 Pandas와 같은 타사 라이브러리를 사용하는 프로그램을 실행하면 오류가 표시됩니다.
package com.company;
import org.python.util.PythonInterpreter;
public class Main {
public static void main(String[] args) {
PythonInterpreter pythonInterpreter = new PythonInterpreter();
pythonInterpreter.exec("from datetime import datetime\n"
+ "\n"
+ "import pandas as pd\n"
+ "\n"
+ "\n"
+ "def check_month_end(date):\n"
+ " return date + pd.offsets.MonthEnd(0) # == date\n"
+ "\n"
+ "\n"
+ "print(check_month_end(datetime(2005, 2, 6)))\n"
+ "\n"
+ "print(check_month_end(datetime(2004, 2, 29)))");
}
}
출력:
C:\java-1.8.0-openjdk-1.8.0.322-2.b06.dev.redhat.windows.x86_64\bin\java.exe ...
Exception in thread "main" Traceback (most recent call last):
File "<string>", line 3, in <module>
ImportError: No module named pandas
또 다른 내장 라이브러리인 syds
를 살펴보겠습니다.
package com.company;
import org.python.util.PythonInterpreter;
public class Main {
public static void main(String[] args) {
PythonInterpreter pythonInterpreter = new PythonInterpreter();
pythonInterpreter.exec("import syds");
}
}
출력:
C:\java-1.8.0-openjdk-1.8.0.322-2.b06.dev.redhat.windows.x86_64\bin\java.exe ...
Exception in thread "main" Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named syds
결론
Jython을 사용하여 Java에서 Python을 실행하는 방법을 배웠습니다. 코드는 Jython 사용 방법과 사용 시기에 대한 주요 이해를 제공합니다.
독자는 Java에서 Python을 실행하는 프로그램을 쉽게 만들 수 있습니다. 이 기사가 코딩 여정에 도움이 되었기를 바랍니다.