Jython を使用して Java で Python を実行する

Jay Shaw 2023年10月12日
  1. Jython を使用して Java で Python を実行する
  2. Jython ライブラリをインストールする
  3. Jython ライブラリを IDE にリンクする
  4. Java で Python コードを記述してコンパイルする
  5. Java でコンパイルされた 2つの数値を加算する Python コード
  6. Java でコンパイルされた月の最終日を検索する Python コード
  7. Java でコンパイルすると実行されない一部の Python ライブラリ
  8. まとめ
Jython を使用して Java で Python を実行する

この記事では、Jython ライブラリを使用して Java プログラムで python を実行する手順を詳しく説明します。 彼がどのようにそれをしたかの瞬間を心配する必要がないように、多くの画像を使用した詳細な段階的なプロセスになります.

Jython を使用して Java で Python を実行する

Java で Python を実行するには、3つの前提条件が必要です。

  1. Python コード。
  2. Jython ライブラリ。
  3. Jython ライブラリをリンクできる IDE。

Python コードを作成する

2つの数値を加算するメソッドを呼び出す単純な Python プログラムを考えてみましょう。 メソッド add() には 2つのパラメーターがあり、これら 2つのパラメーターの合計を返し、出力します。

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


print(add(5, 6))

このプログラムを実行すると、ab の合計が表示されます。

組み込みライブラリを使用する別の python プログラムを見てみましょう。 このプログラムは 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 スタンドアロン ダウンロード

パッケージがマシンにインストールされます。 ダウンロード先のパスを必ず書き留めておいてください。

ほとんどのマシンでは、メイン ライブラリ内の [ダウンロード] の下にあります。

Jython ライブラリを IDE にリンクする

IDE を使用するのが現在の標準であり、そうでない場合、読者は IDE に切り替える必要があります。 この記事では、Java コードを実行するための非常に一般的なソフトウェアである IntelliJ IDE での手順をさらに詳しく説明します。

読者がこれまで IntelliJ を使用したことがなくても、心配はいりません。 すべてがゼロからカバーされます。

まず、こちらからIntelliJをインストールします。 IntelliJ をインストールして使用する準備ができたら、新しいプロジェクトを作成する必要があります。

プロジェクトは、この記事のデモンストレーションに必要なファイル用に別のスペースを作成します。 次に、プロジェクトを Jython ライブラリにリンクして、Java で Python を実行できるようにします。

  • IntelliJ IDE 内で新しいプロジェクトを作成する

    IntelliJ IDE を開き、[新しいプロジェクト] をクリックします。 プロジェクトが既に開いている場合は、[ファイル] > [新規] > [プロジェクト] に移動します。

    intellij 新しいプロジェクト

  • 言語を選択

    このステップでは、プロジェクトに適した言語を選択する必要があります。 追加パッケージのない Java 言語を選択します (Groovy と Kotlin の両方のチェックボックスをオフのままにしておく必要があります)。

    ダイアログ ボックスの上部にある [プロジェクト SDK] には、Java のバージョンが表示されます。 そこに何も表示されない場合は、右端の小さな三角形をクリックして新しいものをダウンロードしてください。

    intellij 新しいプロジェクト 2

  • コマンド ライン プロンプトを有効にする

    チェックボックスにチェックを入れてコマンド ライン アプリを有効にし、[次へ] をクリックします。

    コマンド ライン プロンプトを有効にする

  • プロジェクトに名前を付ける

    プロジェクトに適切な名前を付けます。 この場合、プロジェクトの名前は Python_in_Java です。

    プロジェクトに名前を付ける

    [完了] をクリックすると、新しいプロジェクトが作成されます。

  • IntelliJ IDE で作成されたプロジェクトに Jython ライブラリを追加する

    新しいプロジェクトが作成されると、下の図のようになります。 いくつかの標準コードを含む main クラス ファイルがあります。

    新しいプロジェクトのプレビュー

    Jython をそれにリンクするには、File>Project Structure に移動します。 新しいダイアログ ボックスが表示されます。

    ライブラリ セクション内で、+ アイコンをクリックし、メニューから [Java] を選択します。

    新しいプロジェクト ライブラリで Java を選択

    Java を選択すると、コンピューターからファイルを参照できる新しいダイアログ ボックスが読み込まれます。 ここで、ダウンロードしたスタンドアロン Jython ファイルのパスを覚えておきます。

    ダウンロードした .jar ファイルを選択し、[OK] をクリックします。

    jython を選択

    もう一度 [OK] をクリックすると、Jython Standalone.jar がロードされ、ライブラリ ウィンドウ内に表示されます。 最後に、[OK] をクリックして読み込みを終了します。

    OKをクリック

    このライブラリには Jython がロードされているため、Java プログラムで簡単にコードを記述して Python を実行できるようになりました。

Java で Python コードを記述してコンパイルする

プロジェクトが作成され、Jython ライブラリとリンクされているため、Java コードを記述して Java で Python を実行できます。

Java プログラムは、Jython ライブラリのサブ関数 PythonInterpreter を使用して、JVM (Java 仮想マシン) 内で内部インタープリターを起動します。

Jython ライブラリは Python 2.7 のみをサポートすることに注意してください。 新しい Python バージョンを必要とするスクリプトは、Python コードをカプセル化して他の言語内で実行するマイクロ Web サービスをサポートできますが、複雑で時間のかかるプロセスになる可能性があります。

Jython は、Jython ライブラリーをシステムに統合して、エンド・ユーザーがアプリケーションの機能を拡張する単純なスクリプトまたは複雑なスクリプトを作成できるようにしたい Java プログラマーに最適です。

最後に、Python アプリケーションは、対応する Java アプリケーションよりも 2 ~ 10 倍短くなります。 これは、プログラマーの作業効率に直接影響します。

Python と Java はうまく通信できるため、プログラマーは製品の開発とコンパイル中に 2つの言語を自由に混在させることができます。

まず、Java で Python を実行する 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 サブパッケージが 2 行目にインポートされます。

  3. Main クラスが定義されます。 Java を初めて使用する場合は、すべての Java プログラムには、少なくともその内部に 1つのクラスがあることを知っておく必要があります。

  4. クラス内で、main メソッドが定義されています。 このプログラムは、複雑さを軽減する関数を作成せずに、メイン メソッドに直接ジャンプします。 クラス名は Main メソッドと同じですが、必ずしも必要ではありません。

    いくつかの命名規則に従うと、任意の名前をクラス名にすることができます。

  5. PythonInterpreter のインスタンスが pythonInterpreter として作成されます。 これらのインスタンスは Java ではオブジェクトと呼ばれ、作成後はメイン関数内で使用して、インポートされた関数を呼び出すことができます。

  6. 最後に、コードは pythonInterpreter.exec(); 内に記述されます。 二重引用符を使用した構文。 PythonInterpreter クラス名が示唆するものにもかかわらず、私たちの Python コードは解釈されません。

    JVM は、Jython で Python プログラムを実行します。 したがって、実行する前に、最初に Java バイトコードに変換されます。

    Jython は Python の Java バージョンですが、ネイティブ Python と同じサブパッケージがすべて含まれているとは限りません。

これで、Jython の使用方法について十分に理解できました。 この記事の最初に用意した Python コードをテストしてみましょう。

Java でコンパイルされた 2つの数値を加算する 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 コード

2 番目のプログラムでは、ネイティブ Python ライブラリを使用して月の最終日を見つけました。 ご存知のように、Python インタープリターはすべてのネイティブ ライブラリをロードするわけではありませんが、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 を実行するプログラムを簡単に作成できます。 この記事がコーディングの旅に役立つことを願っています。