Jetzt können Sie Python -Skripte mit Java und Gradle Builds ausführen.
Dieses Gradle -Plugin lädt und installiert automatisch ein bestimmtes Conda -Tool, um Python -Skripte oder andere ausführbare Ausführungen ( pip , conda usw.) aus virtueller Env auszuführen.
Die Python -Projektkonfiguration kann jetzt durch Gradle -Aufgaben vollständig automatisiert werden.
11 oder höher6.2 oder höheres Projekt Ausführen von Python -Skripten oder -projekten durch Ausführen einer einzelnen Aufgabe, die die virtuelle Python -Umgebung herunterladen und installiert.
Zusätzliche Python -Konfiguration (PIP/Conda -Pakete Installation usw.) kann durch Definieren von Gradle -Aufgaben in build.gradle.kts -Datei erfolgen.
Wenden Sie ein Plugin auf ein Projekt an, wie im Gradle -Portal beschrieben.
Konfigurieren Sie ein Plugin, indem Sie die gewünschte Python -Version im Build -Skript angeben:
pythonPlugin {
pythonVersion = " 3.8.2 "
} Definieren Sie eine Aufgabe, um das gewünschte Python -Skript auszuführen, zum Beispiel zum Ausführen von quicksort.py -Skript im main . Fügen Sie die folgende Aufgabenkonfiguration hinzu, um das Skript zu erstellen:
tasks {
register< VenvTask >( " runQuickSort " ) {
workingDir = projectDir.resolve( " main " )
args = listOf ( " quicksort.py " )
}
}Führen Sie das Python -Skript von Gradle aus:
# Linux
./gradlew runQuickSort
# Windows
gradlew.bat runQuickSortWarten Sie, bis Conda installiert ist und die Umgebung eingerichtet ist.
Genießen :) 
Das Plugin -Standardverhalten kann angepasst werden, indem die folgenden Eigenschaften angegeben werden:
pythonVersion -> Python -Umgebungsversion, Standard 3.13.0 , Die verfügbaren können unter https://anaconda.org/conda-forge/python/ überprüft werdencondaVersion -> Miniconda oder Anaconda -Version, Standard py312_24.9.2-0 , Die verfügbaren können unter https://repo.anaconda.com/miniconda/ oder https://repo.anaconda.com/archive/ (Anaconda) überprüft werden.condaInstaller -> Conda Environment Installer Name, Standard ist Miniconda3 für Anaconda -Änderung zu Anaconda3condaRepoUrl -> Repository -URL, mit der Binärdateien heruntergeladen werden sollten, https://repo.anaconda.com/miniconda für Anaconda https://repo.anaconda.com/archive/condaRepoUsername -> Benutzername für die Basisauth bei Bedarf, standardmäßig abwesendcondaRepoPassword -> Passwort für das Basis -Auth, das verwendet wird, wenn condaRepoUsername angegeben ist, sollte nicht direkt in der Skriptdatei übergeben werden, kann von Gradle -Eigenschaften geliefert werden, die standardmäßig nicht vorhanden sindcondaRepoHeaders -> Zusätzliche optionale Header, die für die Verbindung verwendet werden, leere Karte standardmäßiguseHomeDir -> Wenn das true Installationsverzeichnis von user.home System -Eigenschaft false standinstallDir -> Eigenschaft zum Anpassen von Conda Installation Directory entspricht standardmäßig <rootProjectDir>/.gradle/python oder Benutzerhaus, wenn useHomeDir = truesystemArch -> os.arch , standardmäßig erhältideaDir -> Ziel .idea -Verzeichnis zum Erkennen von IntelliJ -Projekten entspricht <rootProjectDir>/.idea Idee standardmäßig Beispielerweiterungskonfiguration innerhalb von build.gradle.kts -Datei:
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 "
}VenvTask -TaskeigenschaftenAlle Aufgaben, die in virtueller Umwelt ausgeführt werden sollten, können auch von den folgenden Feldern angepasst werden:
venvExec -> Name der ausführbaren Datei von Virtual Env, die standardmäßig ausgeführt wird, pythoninputFile -> Optionale Eingabedatei, keine standardmäßig keineoutputFile -> Optionale Ausgabedatei, standardmäßig keineargs -> Liste der Argumente für eine ausführbare venvExec -Datei, die standardmäßig leer istworkingDir -> Arbeitsverzeichnis, Projektverzeichnis standardmäßigenvironment -> Karte mit Umgebungsvariablen, die während der Ausführung angewendet werden sollen, leer standardmäßig leer Beispiel VenvTask -Konfiguration innerhalb von build.gradle.kts -Datei:
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 in diesem Projekt. Automatisch importierte Python SDK:
envSetup -Aufgabe aus.Manueller Weg:
main importierten Quellmodule in den Tests mit der rechten Maustaste auf Mark Directory as Verzeichnis von as Sources root (z. Linux - <installDir>/.gradle/python/Linux/<condaInstaller>-<condaVersion>
Windows - <installDir>/.gradle/python/Windows/<condaInstaller>-<condaVersion>
MacOSX - <installDir>/.gradle/python/MacOSX/<condaInstaller>-<condaVersion>
Wobei <installDir> der Stammkatalog ist, in dem das <condaVersion> durch installDir -Eigenschaft angegeben wird Miniconda3 ist <condaInstaller> Conda Installer z py38_4.8.3
Wenn Sie mit Conda vertraut sind, können Sie auch Conda -Befehle wie conda deactivate oder conda install .
Es kann erforderlich sein, PYTHONPATH in System vor dem Ausführen von Aufgaben zu verunreinigen (https://stackoverflow.com/a/31841132).
Sie können auch einige einfache Inline -Python -Skripte in solchen Build -Dateien ausführen:

Intellij 'Inject Language' -Funktion kann in einem solchen Szenario nützlich sein :)
/usr/bin/env: 'python': No such file or directory bei der Ausführung von envSetup -Aufgaben -> Es hängt mit der Shebang -Char -Limit zusammen, die 128 ist.
Bei der Installation des Conda, wenn der Präfix -Pfad länger ist als die Grenze, wird der Standard -Shebang ( #!/usr/bin/env python ) in der installierten Conda -Skriptdatei ( condabin/conda ) verwendet. Da kein Python -Binär auf diesem Weg zugänglich ist, wird die Ausnahme ausgelöst.
Die einfachste Lösung besteht darin, das Stammprojekt auf dem kürzest möglichen Pfad zu speichern oder mit dem installDir einen kürzeren Pfad pro bestimmtes problematisches Unterprojekt anzugeben.