Ahora, puedes ejecutar scripts de Python con Java y Gradle Builds solamente.
Este complemento de Gradle descarga e instala automáticamente una herramienta de Conda específica para ejecutar scripts de Python u otros ejecutables ( pip , conda etc.) desde virtual env.
La configuración del proyecto de Python puede ser completamente automatizada por las tareas de Gradle ahora.
11 o superior6.2 o proyecto superior Ejecutar scripts o proyectos de Python ejecutando una tarea única que descargará e instalará el entorno virtual de Python.
La configuración adicional de Python (instalación de paquetes de pip/conda, etc.) se puede hacer definiendo tareas de graduación en el archivo build.gradle.kts .
Aplique un complemento a un proyecto como se describe en el portal de Gradle.
Configure un complemento especificando la versión de Python deseada en el script de compilación:
pythonPlugin {
pythonVersion = " 3.8.2 "
} Defina una tarea para ejecutar el script de Python deseado, por ejemplo, para ejecutar el script quicksort.py en el directorio main , agregue la siguiente configuración de la tarea para crear script:
tasks {
register< VenvTask >( " runQuickSort " ) {
workingDir = projectDir.resolve( " main " )
args = listOf ( " quicksort.py " )
}
}Ejecute el guión de Python desde Gradle:
# Linux
./gradlew runQuickSort
# Windows
gradlew.bat runQuickSortEspere hasta que se instale Conda y se configure el entorno.
Disfrutar :) 
El comportamiento predeterminado del complemento se puede ajustar especificando las siguientes propiedades:
pythonVersion -> Versión del entorno de Python, predeterminado 3.13.0 , los disponibles se pueden verificar en https://anaconda.org/conda-forge/python/condaVersion -> Versión de Miniconda o Anaconda, predeterminado py312_24.9.2-0 , los disponibles se pueden verificar en https://repo.anaconda.com/miniconda/ o https://repo.anaconda.com/archive/ (Anaconda)condaInstaller -> Nombre del instalador de Conda Entorno, el valor predeterminado es Miniconda3 , para el cambio de anaconda a Anaconda3condaRepoUrl -> URL de repositorio que debe usarse para descargar binarios, predeterminados https://repo.anaconda.com/miniconda , para Anaconda https://repo.anaconda.com/archive/condaRepoUsername -> Nombre de usuario para la autenticación básica si es necesario, ausente de forma predeterminadacondaRepoPassword -> La contraseña para la autenticación básica, utilizada si se especifica condaRepoUsername , no se debe pasar directamente en el archivo de script, se puede suministrar mediante propiedades de Gradle, ausente de forma predeterminadacondaRepoHeaders -> encabezados opcionales adicionales utilizados para la conexión, mapa vacío de forma predeterminadauseHomeDir -> Cuando true el directorio de instalación predeterminado será el de la propiedad del sistema user.home , false de forma predeterminadainstallDir -> Propiedad para personalizar el directorio de instalación de Conda, es igual a <rootProjectDir>/.gradle/python por defecto o en el inicio del usuario si useHomeDir = truesystemArch -> Arquitectura del sistema operativo, el valor predeterminado se obtiene de la propiedad del sistema os.archideaDir -> Target .idea Directorio para detectar el proyecto IntelliJ, es igual a <rootProjectDir>/.idea de forma predeterminada Configuración de extensión de muestra dentro del archivo build.gradle.kts :
pythonPlugin {
pythonVersion = " 3.7.0 "
condaVersion = " 2022.05 "
condaInstaller = " Anaconda3 "
condaRepoUrl = " https://nexus.com/repositories/conda "
condaRepoUsername = " user "
condaRepoPassword = extra[ " conda.repo.pass " ].toString()
condaRepoHeaders = mapOf (
" CUSTOM_HEADER_1 " to " headerValue1 " ,
" CUSTOM_HEADER_2 " to " headerValue2 "
)
installDir = file(layout.buildDirectory.dir( " python " ))
systemArch = " arm64 "
}VenvTaskTodas las tareas que deben ejecutarse en Virtual ENV también pueden personalizarse mediante los siguientes campos:
venvExec -> Nombre del ejecutable de Virtual Env que se ejecutará, python de forma predeterminadainputFile -> Archivo de entrada opcional, ninguno de forma predeterminadaoutputFile -> Archivo de salida opcional, ninguno de forma predeterminadaargs -> Lista de argumentos para un ejecutable venvExec , vacío de forma predeterminadaworkingDir -> Directorio de trabajo, directorio de proyectos de forma predeterminadaenvironment -> Mapa con variables de entorno para aplicar durante la ejecución, vacía de forma predeterminada Ejemplo de configuración VenvTask dentro del archivo build.gradle.kts :
register< VenvTask >( " runPythonScript " ) {
venvExec = " python "
inputFile = file( " inputFile.txt " )
outputFile = file( " outputFile.txt " )
args = listOf ( " --some-flag " , " arg1 " )
workingDir = projectDir.resolve( " main " )
environment = mapOf ( " ENV_VAR_TO_PRINT " to " sampleEnvVar " )
}examples en este proyecto. Importación automática de Python SDK instalado:
envSetup de gradle.Forma manual:
main ) -> Mark Directory as -> as Sources root . Linux - <installDir>/.gradle/python/Linux/<condaInstaller>-<condaVersion>
Windows - <installDir>/.gradle/python/Windows/<condaInstaller>-<condaVersion>
MACOSX - <installDir>/.gradle/python/MacOSX/<condaInstaller>-<condaVersion>
Donde <installDir> es el catálogo raíz donde la conda se instalará especificada por la propiedad installDir , <condaInstaller> es CondA Installer, por ejemplo, Miniconda3 y <condaVersion> es la versión de Conda Installer, por ejemplo, py38_4.8.3 .
Si está familiarizado con Conda, también puede ejecutar comandos de Conda como conda deactivate o conda install directamente con los binarios de los catálogos anteriores.
Es posible que se requiera PYTHONPATH no sea el sistema antes de ejecutar cualquier tarea (https://stackoverflow.com/a/31841132)
También puede ejecutar algunos scripts de Python en línea simples dentro de los archivos de construcción como este:

La característica de INTELIJ 'Inyect Language' puede ser útil en tal escenario :)
/usr/bin/env: 'python': No such file or directory al ejecutar la tarea envSetup -> Está relacionado con el límite de char shebang, que es 128 .
Al instalar la condena si la ruta de prefijo es más larga que el límite, el shebang predeterminado ( #!/usr/bin/env python ) se está utilizando en el archivo de script de conda instalado ( condabin/conda ). Dado que no se puede acceder a ningún binario de Python en este camino, se está lanzando la excepción.
La solución más fácil es almacenar el proyecto raíz en la ruta más corta posible o usar installDir para especificar una ruta más corta por subproyecto problemático particular.