الآن ، يمكنك تشغيل البرامج النصية Python مع Java و Gradle يبني فقط.
يقوم هذا البرنامج المساعد Gradle تلقائيًا بتنزيل وتثبيت أداة Conda محددة لتشغيل البرامج النصية Python أو تنفيذيات أخرى ( pip ، conda إلخ) من Virtual ENV.
يمكن أن يكون تكوين مشروع Python مؤتمانًا بالكامل بواسطة مهام Gradle الآن.
11 أو أعلى6.2 أو مشروع أعلى تشغيل البرامج النصية أو المشاريع Python من خلال تنفيذ مهمة واحدة من شأنها تنزيل وتثبيت بيئة Python الظاهرية.
يمكن إجراء تكوين Python إضافي (تثبيت حزم PIP/Conda وما إلى ذلك) عن طريق تحديد مهام Gradle في ملف build.gradle.kts .
قم بتطبيق البرنامج المساعد على مشروع كما هو موضح في بوابة Gradle.
قم بتكوين مكون إضافي عن طريق تحديد إصدار Python المطلوب في برنامج Build Script:
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انتظر حتى يتم تثبيت كوندا وإعداد البيئة.
يتمتع :) 
يمكن ضبط السلوك الافتراضي المكون الإضافي عن طريق تحديد الخصائص التالية:
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 -> اسم تثبيت البيئة كوندا ، الافتراضي هو Miniconda3 ، لتغيير Anaconda إلى Anaconda3condaRepoUrl -> عنوان URL المستودع الذي يجب استخدامه لتنزيل الثنائيات ، الافتراضي https://repo.anaconda.com/miniconda ، من أجل Anaconda https://repo.anaconda.com/archive/condaRepoUsernamecondaRepoPassword -> كلمة المرور للمصادقة الأساسية ، المستخدمة إذا تم تحديد condaRepoUsername ، لا ينبغي تمريرها مباشرة في ملف البرنامج النصي ، يمكن توفيرها بواسطة خصائص Gradle ، غائبة بشكل افتراضيcondaRepoHeaders -> رؤوس اختيارية إضافية تستخدم للاتصال ، خريطة فارغة بشكل افتراضيuseHomeDir -> عندما true دليل التثبيت الافتراضي هو الذي يكون من خاصية نظام user.home ، false افتراضيًاinstallDir -> خاصية لتخصيص دليل تثبيت conda true يساوي <rootProjectDir>/.gradle/python useHomeDirsystemArch -> بنية نظام التشغيل ، يتم الحصول على افتراضي من خاصية نظام 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 Gradle.الطريقة اليدوية:
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 على سبيل المثال Miniconda3 و <condaVersion> هو إصدار مثبت conda على سبيل المثال py38_4.8.3
إذا كنت على دراية بـ Conda ، فيمكنك أيضًا تنفيذ أوامر Conda مثل conda deactivate أو conda install مباشرة مع الثنائيات من الكتالوجات أعلاه.
قد يكون هناك حاجة لتوضيح PYTHONPATH في النظام قبل تشغيل أي مهام (https://stackoverflow.com/a/31841132)
يمكنك أيضًا تشغيل بعض البرامج النصية البسيطة في Python داخل ملفات بناء مثل هذا:

يمكن أن تكون ميزة Intellij "حقن اللغة" مفيدة في مثل هذا السيناريو :)
/usr/bin/env: 'python': No such file or directory عند تنفيذ مهمة envSetup -> يرتبط بحد Shebang Char الذي هو 128 .
عند تثبيت Conda إذا كان مسار البادئة أطول من الحد من Shebang الافتراضي ( #!/usr/bin/env python ) يتم استخدامه في ملف البرنامج النصي Conda المثبت ( condabin/conda ). نظرًا لأنه لا يمكن الوصول إلى ثنائي الثنائي من خلال هذا المسار ، يتم إلقاء الاستثناء.
يتمثل الحل الأسهل في تخزين مشروع الجذر في أقصر مسار ممكن أو استخدام installDir لتحديد مسار أقصر لكل مشروع فرعي مزعج معين.