# uv 사용 가이드 — S-CANVAS > **피드백 반영 (#5)**: pip 대신 uv 권장. > uv = Rust로 작성된 ultra-fast Python 패키지 매니저. pip의 10~100배 빠름. ## 1. uv 설치 (Windows) PowerShell: ```powershell irm https://astral.sh/uv/install.ps1 | iex ``` 또는 (winget이 가능한 경우): ```powershell winget install --id=astral-sh.uv -e ``` 또는 pip로: ```powershell pip install uv ``` 설치 후 새 PowerShell 열고 확인: ```powershell uv --version ``` ## 2. 프로젝트 초기화 S-CANVAS 디렉토리에서: ```powershell 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 — 재현 가능 환경 ```powershell 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/`을 만들어 비교: ```powershell 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: ```yaml - 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" ```powershell uv pip install hatchling uv pip install -e . ``` ### Python 3.13 wheel 못 찾음 일부 패키지(예: `rasterio`)는 3.13 wheel이 늦게 나올 수 있음. `[py313]` extras로 핀 완화. ### 기존 venv 충돌 ```powershell # 새 디렉토리로 venv 만들기 uv venv .venv-fresh --python 3.13 ``` ## 9. 사용자가 자주 하는 작업 (cheat sheet) ```powershell # 처음 받은 직후 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 # pyproject.toml의 dependencies에도 수동 추가 후 uv lock # 코드 작업 후 검사 ruff check pytest # 다른 머신에서 동일 환경 재현 git pull uv sync --frozen ```