Jython을 사용하여 Java에서 Python 실행

Jay Shaw 2023년10월12일
  1. Jython을 사용하여 Java에서 Python 실행
  2. Jython 라이브러리 설치
  3. IDE와 Jython 라이브러리 연결
  4. Java로 Python 코드 작성 및 컴파일
  5. Java로 컴파일된 두 개의 숫자를 추가하는 Python 코드
  6. Java로 컴파일된 달의 마지막 날을 찾는 Python 코드
  7. Java로 컴파일할 때 실행되지 않는 일부 Python 라이브러리
  8. 결론
Jython을 사용하여 Java에서 Python 실행

이 기사에서는 Jython 라이브러리를 사용하여 Java 프로그램에서 Python을 실행하는 단계를 철저히 설명합니다. 많은 이미지가 있는 자세한 단계별 프로세스이므로 “그가 어떻게 했는지"에 대해 걱정할 필요가 없습니다.

Jython을 사용하여 Java에서 Python 실행

Java에서 Python을 실행하려면 세 가지 전제 조건이 필요합니다.

  1. 파이썬 코드.
  2. 자이썬 라이브러리.
  3. Jython 라이브러리를 연결할 수 있는 IDE.

파이썬 코드 생성

두 개의 숫자를 더하는 메서드를 호출하는 간단한 파이썬 프로그램을 살펴보겠습니다. 메서드 add()에는 두 개의 매개변수가 있으며 이 두 매개변수의 합을 반환하고 인쇄합니다.

def add(a, b):
    s = a + b
    return s


print(add(5, 6))

이 프로그램을 실행하면 ab의 합계가 인쇄됩니다.

내장 라이브러리를 사용하는 다른 파이썬 프로그램을 살펴보겠습니다. 이 프로그램은 주어진 달의 마지막 날을 찾기 위해 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와 쉽게 연결할 수 있습니다.

Jython 독립형 다운로드

패키지가 컴퓨터에 설치됩니다. 다운로드되는 경로를 기록해 두십시오.

대부분의 컴퓨터에서는 기본 라이브러리 내의 “다운로드"에서 찾을 수 있습니다.

IDE와 Jython 라이브러리 연결

IDE를 사용하는 것이 현재 표준이며 그렇지 않은 경우 독자는 IDE로 전환해야 합니다. 이 문서에서는 Java 코드를 실행하는 데 널리 사용되는 소프트웨어인 IntelliJ IDE의 단계를 자세히 보여줍니다.

독자가 이전에 IntelliJ를 사용한 적이 없더라도 걱정하지 마십시오. 모든 것이 처음부터 다뤄질 것입니다.

먼저 여기에서 IntelliJ를 설치합니다. IntelliJ를 설치하고 사용할 준비가 되면 새 프로젝트를 만들어야 합니다.

프로젝트는 이 기사에서 데모에 필요한 파일을 위한 별도의 공간을 만듭니다. 그러면 프로젝트가 Jython 라이브러리에 연결되어 Java에서 Python을 실행할 수 있습니다.

  • IntelliJ IDE 내에서 새 프로젝트 만들기

    IntelliJ IDE를 열고 ‘새 프로젝트’를 클릭합니다. 프로젝트가 이미 열려 있으면 파일>새로 만들기>프로젝트로 이동합니다.

    intellij 새 프로젝트

  • 언어 선택

    이 단계에서는 프로젝트에 적합한 언어를 선택해야 합니다. 추가 패키지가 없는 Java 언어를 선택합니다(Groovy 및 Kotlin 체크박스 모두 선택하지 않은 상태로 유지해야 함).

    대화 상자 상단의 ‘Project SDK’에는 Java 버전이 표시됩니다. 아무 것도 표시되지 않으면 맨 오른쪽에 있는 작은 삼각형을 클릭하여 새 항목을 다운로드합니다.

    intellij 새 프로젝트 2

  • 명령줄 프롬프트 활성화

    ‘명령줄 앱’을 활성화하려면 확인란을 선택하고 다음을 클릭합니다.

    명령줄 프롬프트 활성화

  • 프로젝트 이름 지정

    프로젝트에 적절한 이름을 지정하십시오. 이 경우 프로젝트 이름은 Python_in_Java입니다.

    프로젝트 이름 지정

    마침을 클릭하면 새 프로젝트가 생성됩니다.

  • IntelliJ IDE에서 생성된 프로젝트에 Jython 라이브러리 추가

    새로운 프로젝트가 생성되면 아래 그림과 같은 모습이 됩니다. 몇 가지 표준 코드가 포함된 main 클래스 파일이 있습니다.

    새 프로젝트 미리보기

    이제 Jython을 여기에 연결하려면 파일>프로젝트 구조로 이동합니다. 새 대화 상자가 나타납니다.

    라이브러리 섹션 내에서 + 아이콘을 클릭하고 메뉴에서 ‘Java’를 선택합니다.

    새 프로젝트 라이브러리에서 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
  }
}

위의 코드가 무엇을 하는지 이해해 봅시다.

  1. 코드의 첫 번째 줄은 Java 프로그램용 표준 IntelliJ 헤더입니다.

  2. Jython의 PythonInterpreter 하위 패키지를 두 번째 줄에 가져옵니다.

  3. Main 클래스가 정의됩니다. Java를 처음 사용하는 경우 모든 Java 프로그램에는 적어도 내부에 하나의 클래스가 있음을 알고 있어야 합니다.

  4. 클래스 내부에 main 메서드가 정의되어 있습니다. 이 프로그램은 복잡성을 줄이기 위해 함수를 만들지 않고 기본 메서드로 바로 이동합니다. 클래스 이름은 Main 메서드와 동일하지만 항상 필요한 것은 아닙니다.

    모든 이름은 일부 명명 규칙에 따라 클래스 이름이 될 수 있습니다.

  5. PythonInterpreter의 인스턴스가 pythonInterpreter로 생성됩니다. 이러한 인스턴스는 Java에서 개체라고 하며 생성 후 기본 함수 내에서 가져온 함수를 호출하는 데 사용할 수 있습니다.

  6. 마지막으로 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을 실행하는 프로그램을 쉽게 만들 수 있습니다. 이 기사가 코딩 여정에 도움이 되었기를 바랍니다.