Ejecutar Python en Java usando Jython

Jay Shaw 15 febrero 2024
  1. Ejecutar Python en Java usando Jython
  2. Instalar la biblioteca Jython
  3. Vincule la biblioteca Jython con un IDE
  4. Escribir códigos de Python en Java y compilarlos
  5. Código de Python para agregar dos números compilados en Java
  6. Código de Python para encontrar el último día del mes compilado en Java
  7. Algunas bibliotecas de Python que no se ejecutan cuando se compilan en Java
  8. Conclusión
Ejecutar Python en Java usando Jython

Este artículo explicará detalladamente los pasos para ejecutar python en programas Java utilizando una biblioteca Jython. Sería un proceso detallado paso a paso con muchas imágenes para que no tengas que preocuparte por los momentos de “cómo hizo eso”.

Ejecutar Python en Java usando Jython

Ejecutar Python en Java requiere tres requisitos previos.

  1. Código Python.
  2. Biblioteca Jython.
  3. Un IDE que pueda vincular la biblioteca Jython.

Crear el código de Python

Tomemos un programa de Python simple que llama a un método para sumar dos números. El método add() tiene dos parámetros y devuelve la suma de estos dos parámetros y los imprime.

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


print(add(5, 6))

Ejecutar este programa imprimiría la suma de a y b.

Veamos otro programa de python que usa una biblioteca incorporada. Este programa utiliza la biblioteca incorporada datetime para encontrar el último día de cualquier mes dado.

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)))

En la última línea de este programa, envía la fecha al método last_day_of_month, devuelve el último día de ese mes y se imprime.

Consideremos también otro programa que utiliza una biblioteca de terceros en el código.

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)))

Este programa utiliza pandas dentro del código. Como se preparan algunos códigos que se usarán para ejecutar Python en programas Java, aprendamos cómo instalar Jython.

Instalar la biblioteca Jython

Jython simplifica la llamada a las funciones de Python desde el código de Java, siempre que el propio código de Python se ejecute bajo Jython y no utilice extensiones C no compatibles.

Sin duda, es la respuesta más simple que se puede encontrar si eso funciona para usted. De lo contrario, se puede utilizar el nuevo intérprete de Java6, que admite la sintaxis org.python.util.PythonInterpreter.

La biblioteca Jython se puede descargar desde aquí. El lector debe descargar la versión de la biblioteca independiente, que ayudaría a vincularla fácilmente con un IDE.

Descarga independiente de Jython

El paquete se instalará en su máquina. Asegúrese de anotar la ruta donde se descarga.

En la mayoría de las máquinas, se puede encontrar en “Descargas” dentro de la biblioteca principal.

Vincule la biblioteca Jython con un IDE

El uso de un IDE es la norma actual, y el lector debe cambiar a él si ese no es el caso. Este artículo demostrará aún más los pasos en IntelliJ IDE, un software muy popular para ejecutar códigos Java.

Si el lector nunca antes ha usado IntelliJ, no se preocupe. Todo estará cubierto desde cero.

Primero, instale IntelliJ desde aquí. Una vez que IntelliJ está instalado y listo para usar, se debe crear un nuevo proyecto.

Un proyecto creará un espacio separado para los archivos necesarios para la demostración en este artículo. Luego, el proyecto se vinculará a la biblioteca Jython para que podamos ejecutar Python en Java.

  • Crear un nuevo proyecto dentro de IntelliJ IDE

    Abra el IDE de IntelliJ y haga clic en ‘Nuevo proyecto’. Si ya hay un proyecto abierto, vaya a Archivo>Nuevo>Proyecto.

    nuevo proyecto intellij

  • Elija un idioma

    En este paso, se debe elegir el idioma correcto para el proyecto. Seleccione el lenguaje Java sin paquetes adicionales (las casillas de verificación de Groovy y Kotlin deben mantenerse sin marcar).

    El ‘SDK del proyecto’ en la parte superior del cuadro de diálogo muestra la versión de Java. Si no se muestra nada allí, descargue uno nuevo haciendo clic en un pequeño triángulo en el extremo derecho.

    intellij nuevo proyecto 2

  • Habilitar la línea de comandos

    Marque la casilla de verificación para habilitar la ‘Aplicación de línea de comandos’ y haga clic en Siguiente.

    habilitar línea de comandos

  • Dar un nombre para el proyecto

    Dar un nombre apropiado para el proyecto. En este caso, el proyecto se llama Python_in_Java.

    Nombra el proyecto

    Al hacer clic en Finalizar se creará un nuevo proyecto.

  • Agregue la biblioteca Jython al proyecto creado en IntelliJ IDE

    Cuando se crea un nuevo proyecto, se parece a la imagen de abajo. Existe el archivo de clase principal con algún código estándar.

    Vista previa del nuevo proyecto

    Ahora, para vincular Jython a él, vaya a Archivo>Estructura del proyecto. Aparecerá un nuevo cuadro de diálogo.

    Dentro de la sección de bibliotecas, haga clic en el icono + y seleccione ‘Java’ en el menú.

    Seleccione Java en la nueva biblioteca de proyectos

    Al seleccionar Java, se cargará un nuevo cuadro de diálogo que nos permite buscar archivos desde la computadora. Ahora es el momento de recordar la ruta del archivo Jython independiente que descargamos.

    Seleccione el archivo .jar que descargamos y haga clic en Aceptar.

    selecciona Jython

    Una vez más, haga clic en Ok, y cargará el Jython Standalone.jar, y se mostrará dentro de la ventana de la biblioteca. Por último, haga clic en Aceptar para finalizar la carga.

    haga clic en Aceptar

    Como Jython se carga en esta biblioteca, ahora podemos escribir códigos y ejecutar python en programas java fácilmente.

Escribir códigos de Python en Java y compilarlos

A medida que el proyecto se crea y se vincula con la biblioteca Jython, se pueden escribir códigos Java para ejecutar Python en Java.

El programa Java utiliza la subfunción PythonInterpreter de la biblioteca Jython para iniciar un intérprete interno dentro de la JVM (Java Virtual Machine).

Tenga en cuenta que la biblioteca Jython solo es compatible con Python 2.7. Los scripts que requieren versiones más recientes de Python pueden admitir microservicios web que encapsulan códigos de Python y los ejecutan dentro de otros lenguajes, pero puede ser un proceso complejo y prolongado.

Jython es más adecuado para los programadores de Java que desean integrar las bibliotecas de Jython en su sistema para permitir que los usuarios finales creen scripts sencillos o complejos que amplíen las capacidades de la aplicación.

Por último, las aplicaciones de Python son de 2 a 10 veces más cortas que sus contrapartes de Java. Esto afecta directamente la productividad con la que trabajan los programadores.

Python y Java se comunican bien, lo que permite a los programadores mezclar libremente los dos lenguajes durante el desarrollo y la compilación del producto.

Primero, necesita crear un programa Java que ejecute Python en 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
  }
}

Entendamos lo que hace el código anterior.

  1. La primera línea de código es un encabezado IntelliJ estándar para programas Java.

  2. El subpaquete PythonInterpreter de Jython se importa en la segunda línea.

  3. Se define una Clase Principal. Si eres nuevo en Java, debes saber que cada programa Java tiene una clase, al menos dentro de él.

  4. Dentro de la clase se define el método principal. Este programa salta directamente al método principal sin crear una función para reducir la complejidad. El nombre de la clase es el mismo que el del método Main, pero no siempre es necesario.

    Cualquier nombre puede ser un nombre de clase sujeto a algunas convenciones de nomenclatura.

  5. Se crea una instancia de PythonInterpreter como pythonInterpreter. Estas instancias se denominan objetos en Java y, después de su creación, se pueden usar dentro de las funciones principales para llamar a las funciones importadas.

  6. Por último, los códigos se escriben dentro del pythonInterpreter.exec(); sintaxis usando comillas dobles. Nuestro código Python no se interpreta, a pesar de lo que sugiere el nombre de la clase PythonInterpreter.

    La JVM ejecuta programas de Python en Jython. Por lo tanto, antes de ejecutarse, primero se convirtieron al código de bytes de Java.

    Aunque Jython es la versión Java de Python, es posible que no tenga los mismos subpaquetes que Python nativo.

Ahora tenemos suficiente comprensión de cómo usar Jython. Probemos los códigos de Python que preparamos al comienzo de este artículo.

Código de Python para agregar dos números compilados en Java

Los códigos de Python se organizan automáticamente dentro de las comillas dobles cuando se copian y pegan en el IDE de IntelliJ.

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))");
  }
}

Producción :

C:\java-1.8.0-openjdk-1.8.0.322-2.b06.dev.redhat.windows.x86_64\bin\java.exe ...
11

Código de Python para encontrar el último día del mes compilado en Java

En el segundo programa, usamos una biblioteca nativa de Python para encontrar el último día del mes. Como sabemos, Python Interpreter no carga todas las bibliotecas nativas, aunque la biblioteca datetime está disponible.

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");
  }
}

Producción :

C:\java-1.8.0-openjdk-1.8.0.322-2.b06.dev.redhat.windows.x86_64\bin\java.exe ...
2022-12-31

Algunas bibliotecas de Python que no se ejecutan cuando se compilan en Java

Cuando se ejecuta un programa que utiliza una biblioteca de terceros como Pandas, que Java no puede importar, muestra un error.

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)))");
  }
}

Producción :

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

Tomemos otra biblioteca incorporada, 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");
  }
}

Producción :

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

Conclusión

Hemos aprendido a usar Jython para ejecutar python en Java. Los códigos brindan una mayor comprensión de cómo usar y cuándo usar Jython.

El lector puede crear fácilmente programas que ejecuten Python en Java. Se espera que este artículo le haya ayudado en su viaje de codificación.