Теперь вы можете запустить сценарии Python только с помощью Java и Gradle Builds.
Этот плагин Gradle автоматически загружает и устанавливает конкретный инструмент Conda для запуска сценариев Python или других исполнителей ( pip , conda и т. Д.) из Virtual Env.
Конфигурация проекта Python может быть полностью автоматизирована с помощью задач Gradle.
11 или выше6.2 или выше проекта Запуск сценариев или проектов Python, выполняя отдельную задачу, которая будет загружать и установить виртуальную среду Python.
Дополнительная конфигурация Python (установка PIP/Conda Packages и т. Д.) Можно выполнить путем определения задач Gradle в файле build.gradle.kts .
Примените плагин к проекту, как описано на Gradle Portal.
Настройте плагин, указав нужную версию Python в сценарии сборки:
pythonPlugin {
pythonVersion = " 3.8.2 "
} Определите задачу для запуска желаемого скрипта Python, например, запустить скрипт quicksort.py в main Dir Добавьте следующую конфигурацию задачи для создания скрипта:
tasks {
register< VenvTask >( " runQuickSort " ) {
workingDir = projectDir.resolve( " main " )
args = listOf ( " quicksort.py " )
}
}Запустите сценарий Python от Gradle:
# Linux
./gradlew runQuickSort
# Windows
gradlew.bat runQuickSortПодождите, пока не установлена Conda и настраивается среда.
Наслаждаться :) 
Поведение плагина по умолчанию можно настроить путем указания следующих свойств:
pythonVersion -> версия среды Python, по умолчанию 3.13.0 , доступные можно проверить по адресу https://anaconda.org/conda-forge/python/condaVersion -> версия Miniconda или Anaconda, по умолчанию py312_24.9.2-0 , доступные можно проверить по адресу https://repo.anaconda.com/miniconda/ или https://repo.anaconda.com/archive/ (anaconda)condaInstaller -> Имя установщика среды Conda, по умолчанию Miniconda3 , для изменения Anaconda на Anaconda3condaRepoUrl -> URL -адреса, который следует использовать для загрузки Binaries, по умолчанию https://repo.anaconda.com/miniconda , для anaconda https://repo.anaconda.com/archive/condaRepoUsername -> Имя пользователя для базовой ауты, если это необходимо, в отсутствие по умолчаниюcondaRepoPassword -> Пароль для базовой AUTH, используемой, если указан condaRepoUsernamecondaRepoHeaders -> Дополнительные дополнительные заголовки, используемые для подключения, пустая карта по умолчаниюuseHomeDir -> Когда true каталог установки по умолчанию будет от свойства user.home System, false по умолчаниюinstallDir -> Свойство для настройки каталога установки Conda, равного <rootProjectDir>/.gradle/python по умолчанию или пользователю домой, если useHomeDir = truesystemArch -> Архитектура операционной системы, по умолчанию получено от свойства системы os.archideaDir -> Target .idea Directory для обнаружения проекта IntelliJ, равным <rootProjectDir>/.idea по умолчанию Пример конфигурации расширения внутри файла 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 "
}VenvTaskВсе задачи, которые должны быть выполнены в Virtual Env, также могут быть настроены следующими полями:
venvExec -> Имя исполняемого из Virtual Env, которое будет выполнено, python по умолчаниюinputFile -> Необязательный входной файл, по умолчанию нет.outputFile -> Необязательный выходной файл, по умолчанию нетargs -> Список аргументов для исполняемого файла venvExec , по умолчанию пустыworkingDir -> Рабочий каталог, каталог проектов по умолчаниюenvironment -> карта с переменными среды для применения во время выполнения, по умолчанию пусты Образец конфигурации VenvTask внутри файла 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 в этом проекте. Автомобильный импорт установлен Python SDK:
envSetup .Ручной способ:
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>
Где <installDir> является корневым каталогом, в котором Conda будет установлен, указанную на свойство installDir , <condaInstaller> является установщиком Conda, EG Miniconda3 и <condaVersion> - версия установщика Conda, например, py38_4.8.3
Если вы знакомы с Conda, вы также можете выполнять команды Conda, такие как conda deactivate или conda install непосредственно с двоичными файлами из каталогов выше.
Может потребоваться незаметно PYTHONPATH в системе перед выполнением любых задач (https://stackoverflow.com/a/31841132)
Вы также можете запустить несколько простых встроенных сценариев Python внутри файлов сборки, как это:

Функция Intellij 'Inject Language' может быть полезна в таком сценарии :)
/usr/bin/env: 'python': No such file or directory при выполнении задачи envSetup -> это связано с ограничением Чар Шебанг, который составляет 128 .
При установке Conda, если путь префикса длиннее, чем ограничение, в установленном файле сценария condabin/conda ( #!/usr/bin/env python ). Поскольку ни один бинарный питон не доступен по этому пути, исключение бросается.
Самое простое решение - сохранить корневой проект в максимально коротком возможном пути или использовать installDir , чтобы указать более короткий путь на конкретный неприятный подпроект.