Jython を使用して Java で Python を実行する
- Jython を使用して Java で Python を実行する
- Jython ライブラリをインストールする
- Jython ライブラリを IDE にリンクする
- Java で Python コードを記述してコンパイルする
- Java でコンパイルされた 2つの数値を加算する Python コード
- Java でコンパイルされた月の最終日を検索する Python コード
- Java でコンパイルすると実行されない一部の Python ライブラリ
- まとめ
 
この記事では、Jython ライブラリを使用して Java プログラムで python を実行する手順を詳しく説明します。 彼がどのようにそれをしたかの瞬間を心配する必要がないように、多くの画像を使用した詳細な段階的なプロセスになります.
Jython を使用して Java で Python を実行する
Java で Python を実行するには、3つの前提条件が必要です。
- Python コード。
- Jython ライブラリ。
- Jython ライブラリをリンクできる IDE。
Python コードを作成する
2つの数値を加算するメソッドを呼び出す単純な Python プログラムを考えてみましょう。 メソッド add() には 2つのパラメーターがあり、これら 2つのパラメーターの合計を返し、出力します。
def add(a, b):
    s = a + b
    return s
print(add(5, 6))
このプログラムを実行すると、a と b の合計が表示されます。
組み込みライブラリを使用する別の 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 ライブラリを IDE にリンクする
IDE を使用するのが現在の標準であり、そうでない場合、読者は IDE に切り替える必要があります。 この記事では、Java コードを実行するための非常に一般的なソフトウェアである IntelliJ IDE での手順をさらに詳しく説明します。
読者がこれまで IntelliJ を使用したことがなくても、心配はいりません。 すべてがゼロからカバーされます。
まず、こちらからIntelliJをインストールします。 IntelliJ をインストールして使用する準備ができたら、新しいプロジェクトを作成する必要があります。
プロジェクトは、この記事のデモンストレーションに必要なファイル用に別のスペースを作成します。 次に、プロジェクトを Jython ライブラリにリンクして、Java で Python を実行できるようにします。
- 
IntelliJ IDE 内で新しいプロジェクトを作成するIntelliJ IDE を開き、[新しいプロジェクト] をクリックします。 プロジェクトが既に開いている場合は、[ファイル] > [新規] > [プロジェクト] に移動します。  
- 
言語を選択このステップでは、プロジェクトに適した言語を選択する必要があります。 追加パッケージのない Java 言語を選択します (Groovy と Kotlin の両方のチェックボックスをオフのままにしておく必要があります)。 ダイアログ ボックスの上部にある [プロジェクト SDK] には、Java のバージョンが表示されます。 そこに何も表示されない場合は、右端の小さな三角形をクリックして新しいものをダウンロードしてください。  
- 
コマンド ライン プロンプトを有効にするチェックボックスにチェックを入れて コマンド ライン アプリを有効にし、[次へ] をクリックします。 
- 
プロジェクトに名前を付けるプロジェクトに適切な名前を付けます。 この場合、プロジェクトの名前は Python_in_Javaです。 [完了] をクリックすると、新しいプロジェクトが作成されます。 
- 
IntelliJ IDE で作成されたプロジェクトに Jython ライブラリを追加する新しいプロジェクトが作成されると、下の図のようになります。 いくつかの標準コードを含む mainクラス ファイルがあります。 Jython をそれにリンクするには、File>Project Structure に移動します。 新しいダイアログ ボックスが表示されます。 ライブラリ セクション内で、 +アイコンをクリックし、メニューから [Java] を選択します。 Java を選択すると、コンピューターからファイルを参照できる新しいダイアログ ボックスが読み込まれます。 ここで、ダウンロードしたスタンドアロン Jython ファイルのパスを覚えておきます。 ダウンロードした .jarファイルを選択し、[OK] をクリックします。 もう一度 [OK] をクリックすると、 Jython Standalone.jarがロードされ、ライブラリ ウィンドウ内に表示されます。 最後に、[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
  }
}
上記のコードが何をするかを理解しましょう。
- 
コードの最初の行は、Java プログラムの標準 IntelliJ ヘッダーです。 
- 
Jython の PythonInterpreterサブパッケージが 2 行目にインポートされます。
- 
Mainクラスが定義されます。 Java を初めて使用する場合は、すべての Java プログラムには、少なくともその内部に 1つのクラスがあることを知っておく必要があります。
- 
クラス内で、 mainメソッドが定義されています。 このプログラムは、複雑さを軽減する関数を作成せずに、メイン メソッドに直接ジャンプします。 クラス名はMainメソッドと同じですが、必ずしも必要ではありません。いくつかの命名規則に従うと、任意の名前をクラス名にすることができます。 
- 
PythonInterpreterのインスタンスがpythonInterpreterとして作成されます。 これらのインスタンスは Java ではオブジェクトと呼ばれ、作成後はメイン関数内で使用して、インポートされた関数を呼び出すことができます。
- 
最後に、コードは 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 を実行するプログラムを簡単に作成できます。 この記事がコーディングの旅に役立つことを願っています。