시작하기
설치와 첫 실행
필요한 것은 둘입니다. CLI이자 매니저인 darkpyonix 바이너리, 그리고 커널이 쓸 Python 3.8 이상 인터프리터입니다. 그 인터프리터에 DarkPyonix를 설치할 필요는 없습니다.
CLI 받기
CLI와 매니저는 Rust 바이너리 darkpyonix 하나입니다. 바이너리 안에 커널의 파이썬 소스가 들어
있고, 처음 쓸 때 ~/.darkpyonix/runtime/에 풉니다. 그래서 바이너리 하나만 있으면 커널을 띄울 수
있습니다.
미리 빌드한 바이너리는 아직 배포하지 않습니다 계획. 바이너리를 담은 wheel로 낼 계획입니다(INTENT D10). 그때까지는 저장소에서 직접 빌드합니다. stable Rust 툴체인이 필요합니다.
git clone https://github.com/DarkPyonix/darkpyonix
cd darkpyonix
cargo build --release --manifest-path darkpyonix/manager/Cargo.toml
# 바이너리: darkpyonix/manager/target/release/darkpyonix
darkpyonix/manager/target/release/darkpyonix를 PATH에 넣습니다.
런타임 API
커널 안에서는 import darkpyonix가 항상 됩니다. 커널이 자기 소스를 darkpyonix
이름으로 불러오기 때문입니다. 패키지를 설치하는 것은 커널 밖에서 노트북을 돌릴 때뿐입니다. 예를 들어 CI에서
python train.py로 실행할 때입니다.
uv add darkpyonix # uv 프로젝트에 추가
ppp core add "darkpyonix==0.2.0" # pypackpack
tcl install darkpyonix # toolchain-lite
0.2.0은 아직 PyPI에 없습니다 계획 #46. 지금 PyPI에 있는 것은 2025년에 올린 0.1.0이고, MIT 라이선스이며 이 가이드가 설명하는 런타임 API가 아닙니다. 0.2.0은 PR #46이 들어간 뒤 GitHub 릴리스를 만들면 Apache-2.0으로 배포됩니다(이슈 #45). 패키지는 표준 라이브러리만 쓰고 의존성이 없습니다.
인터프리터 고르기
커널은 시작할 때 정한 인터프리터로 돕니다. 순서는 --python PATH, 환경 변수
DARKPYONIX_PYTHON, PATH의 python3 또는 python입니다. 커널은
종료될 때까지 그 인터프리터를 유지하므로, --python은 커널이 아직 떠 있지 않을 때만 의미가
있습니다.
코드가 자기 패키지를 찾도록 프로젝트 환경을 가리킵니다.
uv sync # 내 프로젝트 의존성으로 .venv 만들기
darkpyonix run train.py --python .venv/bin/python
darkpyonix run train.py --param lr=0.02 # 두 번째 실행: 같은 커널, 새 파라미터
첫 실행
어떤 .py 파일이든 됩니다. # %% 셀 표식이 있는 파일은 셀마다 출력과 기록이
나뉩니다(노트북 파일 참고).
첫 run은 매니저를 찾지 못하면 임시 매니저를 띄우고, 매니저가 커널을 띄웁니다. 두 번째 실행은
둘 다 재사용합니다. 첫 실행이 아직 돌고 있으면 두 번째는 종료 코드 75와 함께
--queue나 stop을 쓰라는 안내로 거절됩니다. 한 프로세스에서 같은 파일을 두 번 돌리면
상태가 섞여 망가지기 때문에 일부러 막은 것입니다.
실행 뒤에는 파일 옆에 __runs__/train.py/ 폴더가 생기고 실행마다 .ipynb가 하나씩
남습니다. 실행 기록에서 설명합니다.
저장 위치
사용자별 상태는 ~/.darkpyonix/에 있습니다. 테스트처럼 옮기고 싶으면
DARKPYONIX_HOME을 지정합니다.
| 경로 | 내용 |
|---|---|
user.key | 같은 OS 사용자의 커널과 매니저가 인증에 쓰는 키입니다. 권한 0600, 처음 쓸 때 만듭니다. 없어지는 중입니다. 커널은 OS가 알려 주는 상대 계정이 같을 때만 받게 됩니다 변경 중 #55 |
locks/<kernel_id>.lock | 파일당 커널 하나를 지키는 OS 잠금입니다. 커널이 죽으면 OS가 풀어 주므로 남은 파일 때문에 막히지 않습니다. |
runtime/ | 바이너리에서 풀어 낸 커널 소스입니다. |
kernels/<kernel_id>.json, managers/<pid>.json | 발견과 CLI의 매니저 찾기에 쓰는 등록 파일입니다. 없애는 중입니다 변경 중 #50. |
manager.db | 전용 매니저의 공유 토큰 해시입니다. |