Files
s-canvas/UV_GUIDE.md
HYUNJUNGLEE e9cc6bfcf4 Phase 0 of expert feedback (#1~#11): infrastructure + design + 1차 fixes
Implementations (즉시 동작):
- #1 crash logging: harness/crash_logger.py (sys.excepthook + threading +
  faulthandler, 회전 파일 logs/scanvas.log). main 진입점 통합.
- #2 smooth curves (1차): gate_3d_builder ogee profile를 arc-length parametric
  CubicSpline로 4× densify (8pt→32pt, 36→132 cells, 60 FPS 안전).
- #3 TIN colormap: matplotlib "terrain"의 파란색 범위 제거 → 짙은갈색→황토→
  모래→능선 LinearSegmentedColormap. 9 사이트 교체. 회귀 테스트 추가.
- #5 uv: pyproject.toml + UV_GUIDE.md. base/[py313]/[dev]/[build] extras + hatchling.
- #6,#7,#8 dev cycle infra: .pre-commit-config.yaml (ruff+secrets+위생),
  .gitea/workflows/ci.yml (Py3.11+3.13 matrix), tests/test_regressions.py
  (18 회귀 테스트, iter=1~7 fix 박제), CONTRIBUTING.md (Red→Green 알고리즘).

Design docs (다음 세션 마이그레이션 청사진):
- #4 UI/UX 전면 수정: UI_REDESIGN_PLAN.md (12 popup→1 inspector, vtkTkRenderWidget
  embedding 게이트, 4 phase × 7 sessions).
- #10 Core/Plugin: ARCHITECTURE_PLAN.md (Core 14 / Plugin 7 구조물 + 2 렌더 + 1 QA,
  STRUCTURE_REGISTRY 확장, manifest 기반 디스커버리).
- #11 perf hotspots: PERFORMANCE_BASELINE.md (19 핫스팟, P1: 타일 직렬DL 5~30s,
  캡처 직렬 4.5~15s, numpy 벡터화 가능 Python loops, 텍스처 4회 반복read).

Behavior preservation: ruff 0 errors, pytest 17 passed/1 skipped(bpy),
import 33/33 OK on Py3.13.13.

Item #2 P2/P3 곡선, #4 UI 마이그레이션, #10 Phase 1 추출, #11 P1 최적화는 차기 세션.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 11:45:30 +09:00

3.5 KiB

uv 사용 가이드 — S-CANVAS

피드백 반영 (#5): pip 대신 uv 권장. uv = Rust로 작성된 ultra-fast Python 패키지 매니저. pip의 10~100배 빠름.

1. uv 설치 (Windows)

PowerShell:

irm https://astral.sh/uv/install.ps1 | iex

또는 (winget이 가능한 경우):

winget install --id=astral-sh.uv -e

또는 pip로:

pip install uv

설치 후 새 PowerShell 열고 확인:

uv --version

2. 프로젝트 초기화

S-CANVAS 디렉토리에서:

cd D:\2026\PROGRAM\1_S-CANVAS

# 기본 (Py3.9~3.12) 환경 만들기
uv venv .venv --python 3.11
.\.venv\Scripts\activate
uv pip install -e .

# 또는 Python 3.13 환경
uv venv .venv313 --python 3.13
.\.venv313\Scripts\activate
uv pip install -e ".[py313]"

# 개발 도구 함께 설치
uv pip install -e ".[py313,dev]"

3. uv lock — 재현 가능 환경

uv lock           # uv.lock 생성/갱신 (의존성 트리 freeze)
uv sync           # uv.lock 기준으로 환경 동기화 (== install)
uv sync --frozen  # lock 변경 없이만 동기화 (CI 권장)

uv.lock은 git에 커밋 (다른 머신에서 동일 환경 재현).

4. 자주 쓰는 명령

작업 uv 명령 pip 등가
패키지 추가 uv pip install foo pip install foo
dev 패키지 추가 uv pip install -e ".[dev]" pip install -e ".[dev]"
환경 동기화 uv sync pip install -r requirements.txt
패키지 제거 uv pip uninstall foo pip uninstall foo
의존성 트리 보기 uv pip tree pip list (트리는 pipdeptree)
캐시 비우기 uv cache clean (없음)

5. 기존 pip 환경에서 마이그레이션

기존 venv313/을 두고 새 .venv313/을 만들어 비교:

uv venv .venv313 --python 3.13
.\.venv313\Scripts\activate
uv pip install -e ".[py313,dev]"

# import smoke test
python -c "import scanvas_maker; print('OK')"

문제 없으면 기존 venv313/ 삭제. uv 환경이 더 빠르게 만들어짐 (수 초 vs 수 분).

6. CI/CD에서 uv 사용

Gitea Actions / GitHub Actions:

- uses: astral-sh/setup-uv@v3
- run: uv sync --frozen --extra dev
- run: uv run pytest
- run: uv run ruff check

7. 기존 requirements.txt / requirements-py313.txt 호환

pyproject.toml이 정식 dependency 선언. 기존 requirements 파일들은:

  • requirements.txt: 빌드 머신 핀 보존용 (PyInstaller .exe 재현)
  • requirements-py313.txt: iter=3에서 만든 호환 핀 (현재는 [py313] extras에 흡수됨)

새 작업은 모두 pyproject.toml 수정. requirements.txt는 deprecated.

8. 트러블슈팅

uv pip install -e . 실패: "build backend 'hatchling' not found"

uv pip install hatchling
uv pip install -e .

Python 3.13 wheel 못 찾음

일부 패키지(예: rasterio)는 3.13 wheel이 늦게 나올 수 있음. [py313] extras로 핀 완화.

기존 venv 충돌

# 새 디렉토리로 venv 만들기
uv venv .venv-fresh --python 3.13

9. 사용자가 자주 하는 작업 (cheat sheet)

# 처음 받은 직후
cd D:\2026\PROGRAM\1_S-CANVAS
uv venv .venv313 --python 3.13
.\.venv313\Scripts\activate
uv pip install -e ".[py313,dev]"

# 새 패키지 추가 시
uv pip install <package>
# pyproject.toml의 dependencies에도 수동 추가 후
uv lock

# 코드 작업 후 검사
ruff check
pytest

# 다른 머신에서 동일 환경 재현
git pull
uv sync --frozen