Status & FAQ상태와 FAQ

What works today, measured against the maintainer's example build file. “Implemented” means a test in this repository exercises it.

지금 되는 것을 메인테이너의 예시 빌드 파일에 대어 본 것입니다. “구현” 은 이 저장소의 테스트가 그것을 실행한다는 뜻입니다.

Feature status기능 상태

Feature기능Status상태Evidence근거
Applying the plugin: python extension and tasks플러그인 적용: python 확장과 태스크implemented구현PythonPluginApplyTest
compileSdk parsing: alpha · rc · normalcompileSdk 파싱: alpha · rc · normalimplemented구현PythonVersionTest
Platform → triple mapping, Kotlin target check, min SDK플랫폼 → 트리플 매핑, Kotlin 타깃 확인, 최소 SDKimplemented구현PythonExtensionPlatformDslTest, PlatformTargetMappingTest, PythonPluginPlatformsTest
debug / release, -Ppython.buildTypedebug / release, -Ppython.buildTypeimplemented구현PythonPluginBuildTypeTest
Per-variant task graph변형별 태스크 그래프implemented구현PythonPluginVariantGraphTest
compileLevel = instant · bytecode (.venv and compileSdk minor checked); others rejected per variantcompileLevel = instant · bytecode (.venv 와 compileSdk 마이너 버전 확인); 나머지는 변형별 거부implemented구현PythonPluginBuildLevelTest, BytecodeLevelTest
srcDirs / metaDirs / libDirssrcDirs / metaDirs / libDirsimplemented구현PythonPluginSourceSetTest
implementation / integration → uv addimplementation / integration → uv addimplemented구현PythonPluginDependencyTest, InstallDependenciesTaskTest
Bundling via pypackpack's resource bundlerpypackpack 리소스 번들러로 번들링implemented구현BuildPythonArtifactTaskTest
packagePython zippackagePython zipimplemented구현AssemblePythonPackageTaskTest
Staging copy rule and variant selection스테이징 복사 규칙과 변형 선택implemented구현StagePythonBundleTaskTest, PythonPluginStagingTest
tcl installtcl installimplemented구현CliArgsTest, InstallerTest
tcl --help, tcl --versiontcl --help, tcl --versionimplemented구현CliArgsTest
toolchain-lite on PyPI (uv tool install toolchain-lite)PyPI 의 toolchain-lite (uv tool install toolchain-lite)partial부분CI builds and smoke-tests the wheels; not uploaded yetCI 가 휠을 빌드하고 스모크 테스트함. 아직 업로드 안 됨
Staging into the desktop jar데스크톱 jar 로의 스테이징implemented구현PythonPluginAttachmentTest
Staging into the APKAPK 로의 스테이징partial부분asset root tested (PythonPluginAttachmentTest); task dependency untested에셋 루트는 테스트됨 (PythonPluginAttachmentTest), 태스크 의존성은 테스트 없음
Hot reload핫 리로드partial부분Android, adb only; serverHost unusedAndroid, adb 만; serverHost 미사용
Code push코드 푸시partial부분validation only검증만
Dependencies per source set, installed for each variant's own triple into its bundle소스셋별 의존성을 변형마다 그 트리플용으로 설치해 번들에 포함implemented구현TargetDependenciesTest, PythonPluginTargetDependenciesTest, InstallTargetDependenciesTaskTest
integration(): warn when the wheel has no KLIBDEPENSintegration(): 휠에 KLIBDEPENS 가 없으면 경고implemented구현KlibDepensTest, PythonPluginIntegrationListTest
native / mixednative / mixedplanned계획needs pypackpack#19pypackpack#19 선행 필요
iOS: attaching the staged payload (stagePythonBundleIosForXcode prints the path; the Xcode phase is python-multiplatform's, #59)iOS: 스테이징된 페이로드 연결 (stagePythonBundleIosForXcode 가 경로 출력, Xcode 단계는 python-multiplatform #59 소유)partial부분StagePythonBundleIosForXcodeTaskTest, StagePythonPayloadScriptTest
buildFeatures { metaclass } and excludeMetaclass: metaDirs forwarded or droppedbuildFeatures { metaclass } 와 excludeMetaclass: metaDirs 전달 또는 제외implemented구현BuildFeaturesTest, PythonPluginBuildFeaturesTest
buildFeatures { compose }: installs pythonx-compose, adds python-multiplatform-compose to commonMainbuildFeatures { compose }: pythonx-compose 설치, commonMain 에 python-multiplatform-compose 추가implemented구현BuildFeaturesTest, PythonPluginBuildFeaturesTest; locations from two Gradle propertiesBuildFeaturesTest, PythonPluginBuildFeaturesTest; 위치는 Gradle 속성 두 개로 지정
embedLevel: 0/1/2 resolved per platform (Android and iOS raise to 2 with a warning), -Ppython.embedLevel override, recorded in embed.json with the expected interpreter version; level 2 means python-multiplatform embeds the interpreter, and the bundle stays python/ onlyembedLevel: 플랫폼별 0/1/2 결정 (Android, iOS 는 경고와 함께 2 로 상향), -Ppython.embedLevel 재정의, 기대 인터프리터 버전과 함께 embed.json 에 기록; 레벨 2 는 python-multiplatform 이 인터프리터를 내장한다는 뜻이고, 번들은 python/ 만 담음implemented구현EmbedLevelTest, PythonPluginEmbedLevelTest, PythonPluginPythonOnlyTest
useCodeMinifieruseCodeMinifierplanned계획declared, unread선언만, 읽히지 않음
defaultConfig { pip }: central · local · autoUpdatedefaultConfig { pip }: central · local · autoUpdateimplemented구현PipRepositoriesTest
pip { jit }pip { jit }planned계획-
compileSdk constants (PY3_14_7); unprovided versions refused per taskcompileSdk 상수(PY3_14_7); 제공되지 않는 버전은 태스크에서 거부implemented구현PythonSdkTest, BuildPythonSdkRejectionTest
projectFlavors in the variant graph; -Ppython.flavor변형 그래프의 projectFlavors; -Ppython.flavorimplemented구현PythonPluginFlavorsTest
defaultConfig { versionCode, versionName } → bundle manifestdefaultConfig { versionCode, versionName } → 번들 manifestimplemented구현PythonPluginPayloadVersionTest, BuildPythonArtifactTaskTest
toolchain ships only python/: compileSdk selects the wheels' Python version and fetches no interpreter; the interpreter and stdlib come from python-multiplatformtoolchain 은 python/ 만 실음: compileSdk 는 wheel 의 Python 버전을 고를 뿐 인터프리터를 받지 않음; 인터프리터와 stdlib 는 python-multiplatform 이 제공implemented구현PythonPluginTargetDependenciesTest, PythonPluginPythonOnlyTest
compileSdk checked against python-multiplatform's pythonVersion at level 2 (a mismatch fails only that variant's buildPython…); read from -Ppython.multiplatform.pythonVersion, the :python-multiplatform project's extension, or the published dependency's metadata or jar레벨 2 에서 compileSdk 를 python-multiplatform 의 pythonVersion 과 대조 (다르면 그 변형의 buildPython… 만 실패); -Ppython.multiplatform.pythonVersion, :python-multiplatform 프로젝트의 확장, 또는 배포된 의존의 메타데이터나 jar 에서 읽음implemented구현PythonVersionAgreementTest, PythonPluginPythonOnlyTest, PublishedPythonVersionTest

FAQ자주 묻는 질문

Why does my compileLevel = "bytecode" fail?왜 compileLevel = "bytecode" 가 실패하나요?

It needs a Python to compile with: a .venv at or above the package directory, whose minor version matches compileSdk. If there is none, or the versions differ, that variant's task fails and its message names the directory and the fix. native and mixed fail the same way until pypackpack's compile slot (pypackpack#19) exists.

컴파일할 Python 이 필요합니다. 패키지 디렉터리나 그 위에 있는 .venv 이고, 그 마이너 버전이 compileSdk 와 같아야 합니다. 없거나 버전이 다르면 그 변형의 태스크가 실패하고, 메시지에 디렉터리와 해결 방법이 나옵니다. native 와 mixed 는 pypackpack 의 컴파일 슬롯(pypackpack#19)이 생길 때까지 같은 방식으로 실패합니다.

Why does androidArm32() not compile?왜 androidArm32() 가 컴파일되지 않나요?

Android support follows CPython's official Android support (PEP 738): aarch64-linux-android and x86_64-linux-android. The example build file lists 32-bit and x86 variants because it was written before that was settled.

안드로이드 지원은 CPython 공식 안드로이드 지원(PEP 738)인 aarch64-linux-android 와 x86_64-linux-android 를 따릅니다. 예시 빌드 파일에 32비트와 x86 변형이 있는 것은 그 결정 전에 쓰였기 때문입니다.

Does hot reload work on iOS or desktop?핫 리로드가 iOS 나 데스크톱에서 되나요?

Not yet. hotReloadPython pushes .py files with adb and sends the org.thisisthepy.python.RELOAD_PYTHON broadcast; reloading the modules is the runtime's job.

아직입니다. hotReloadPython 은 adb 로 .py 파일을 밀어 넣고 org.thisisthepy.python.RELOAD_PYTHON 브로드캐스트를 보냅니다. 모듈을 다시 불러오는 것은 런타임의 일입니다.

Is the DSL final?DSL 은 확정인가요?

The example build file is the contract, and the plugin is being brought to it. Platforms already follow it: they are declared directly inside python { }. What still differs is listed on this page and in the specification.

예시 빌드 파일이 계약이고, 플러그인을 그쪽에 맞추는 중입니다. 플랫폼은 이미 맞췄습니다. python { } 바로 안에 선언합니다. 아직 다른 부분은 이 페이지와 스펙에 적혀 있습니다.

Contributing기여하기

Changes go intent → spec → test → code. A behaviour change begins as a change to the specification; its test is written first and seen failing; then the code makes it pass. A DSL value is never accepted silently: it is wired to a task, or rejected with a reason.

변경은 의도 → 스펙 → 테스트 → 코드 순서로 갑니다. 동작 변경은 스펙 변경에서 시작하고, 테스트를 먼저 써서 실패를 확인한 뒤, 코드로 통과시킵니다. DSL 값은 조용히 받아들이지 않습니다: 태스크에 연결하거나, 이유와 함께 거부합니다.

./gradlew :toolchain:test --rerun     # plugin; needs packpack in Maven Local, uv and network
./gradlew :toolchain:cliTest --rerun  # tcl; needs uv and network
python3 docs/guide/check_guide.py     # this site

Run each module on its own, and count results from build/test-results/ rather than from the console.

모듈은 따로따로 실행하고, 결과는 콘솔이 아니라 build/test-results/ 에서 세세요.