Maintenant, vous pouvez exécuter des scripts Python avec Java et Gradle Builds uniquement.
Ce plugin Gradle télécharge et installe automatiquement un outil Conda spécifique pour exécuter des scripts Python ou d'autres exécutables ( pip , conda etc.) à partir de virtual Env.
La configuration du projet Python peut être entièrement automatisée par les tâches Gradle maintenant.
11 ou plus6.2 ou plus projet Exécuter des scripts ou des projets Python en exécutant une seule tâche qui téléchargera et installera un environnement virtuel Python.
La configuration Python supplémentaire (installation PIP / Conda Packages, etc.) peut être effectuée en définissant les tâches Gradle dans le fichier build.gradle.kts .
Appliquez un plugin sur un projet décrit sur Gradle Portal.
Configurez un plugin en spécifiant la version Python souhaitée dans le script de construction:
pythonPlugin {
pythonVersion = " 3.8.2 "
} Définissez une tâche pour exécuter le script Python souhaité, par exemple pour exécuter le script quicksort.py dans le dir main Ajouter la configuration de tâche suivante pour créer le script:
tasks {
register< VenvTask >( " runQuickSort " ) {
workingDir = projectDir.resolve( " main " )
args = listOf ( " quicksort.py " )
}
}Exécutez le script Python de Gradle:
# Linux
./gradlew runQuickSort
# Windows
gradlew.bat runQuickSortAttendez que Conda soit installée et la configuration de l'environnement.
Apprécier :) 
Le comportement par défaut du plugin peut être ajusté en spécifiant les propriétés suivantes:
pythonVersion -> Version de l'environnement Python, par défaut 3.13.0 , celles disponibles peuvent être vérifiées sur https://anaconda.org/conda-forge/python/condaVersion -> Version miniconda ou anaconda, par défaut py312_24.9.2-0 , les disponibles peuvent être vérifiés sur https://repo.anaconda.com/miniconda/ ou https://repo.anaconda.com/archive/ (anaconda)condaInstaller -> Nom du programme d'installation de l'environnement conda, la valeur par défaut est Miniconda3 , pour Anaconda Changement en Anaconda3condaRepoUrl -> URL du référentiel qui doit être utilisé pour télécharger des binaires, par défaut https://repo.anaconda.com/miniconda , pour anaconda https://repo.anaconda.com/archive/condaRepoUsername -> nom d'utilisateur pour l'authentification de base si nécessaire, absent par défautcondaRepoPassword -> Mot de passe pour l'authentification de base, utilisé si condaRepoUsername est spécifié, ne doit pas être transmis directement dans le fichier de script, peut être fourni par Gradle Properties, absent par défautcondaRepoHeaders -> En-têtes facultatifs supplémentaires utilisés pour la connexion, carte vide par défautuseHomeDir -> Lorsque true le répertoire d'installation par défaut sera celui de la propriété système user.home , false par défautinstallDir -> Propriété pour personnaliser le répertoire d'installation conda, est égal à <rootProjectDir>/.gradle/python par défaut ou à la maison utilisateur si useHomeDir = truesystemArch -> Architecture du système d'exploitation, la valeur par défaut est obtenue de la propriété système os.archideaDir -> Target .idea Directory to Detect IntelliJ Project, est égal à <rootProjectDir>/.idea Idée par défaut Exemple de configuration d'extension à l'intérieur du fichier 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 "
}VenvTaskToutes les tâches qui devraient être exécutées dans Virtual Env peuvent également être personnalisées par les champs suivants:
venvExec -> Nom de l'exécutable à partir de Virtual Env qui sera exécuté, python par défautinputFile -> Fichier d'entrée facultatif, aucun par défautoutputFile -> Fichier de sortie facultatif, aucun par défautargs -> Liste des arguments pour un exécutable venvExec , vide par défautworkingDir -> Répertoire de travail, répertoire de projet par défautenvironment -> Carte avec des variables d'environnement à appliquer pendant l'exécution, vide par défaut Exemple de configuration VenvTask à l'intérieur du fichier 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 de ce projet. SDK Python installé automatique:
envSetup .Manuel:
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>
Où <installDir> est le catalogue racine où le conda sera installé spécifié par la propriété installDir , <condaInstaller> est l'installateur de conda, par exemple Miniconda3 et <condaVersion> est la version de l'installation de conda, par exemple py38_4.8.3
Si vous connaissez Conda, vous pouvez également exécuter des commandes conda comme conda deactivate ou conda install directement avec les binaires des catalogues ci-dessus.
Il peut être nécessaire de permettre à PYTHONPATH dans le système avant d'exécuter toutes les tâches (https://stackoverflow.com/a/31841132)
Vous pouvez également exécuter des scripts Python en ligne simples dans des fichiers de construction comme celui-ci:

La fonctionnalité Intellij 'Inject Language' peut être utile dans un tel scénario :)
/usr/bin/env: 'python': No such file or directory lors de l'exécution de la tâche envSetup -> il est lié à la limite de char shebang qui est 128 .
Lors de l'installation du conda, si le chemin de préfixe est plus long que la limite, le shebang par défaut ( #!/usr/bin/env python ) est utilisé dans le fichier de script conda installé ( condabin/conda ). Étant donné qu'aucun binaire Python n'est accessible par ce chemin, l'exception est lancée.
La solution la plus simple consiste à stocker le projet racine sur le chemin le plus court possible ou à utiliser l' installDir pour spécifier un chemin plus court par sous-projet gênant particulier.