원격 Mac에서 wheel·sdist 대량 설치가 끊기면 CI 전체가 실패합니다. pip·conda 대비 uv 선택, 병렬·타임아웃·캐시·미러, TLS·프록시, lockfile을 표로 정리합니다. 데이터·ML 파이프라인 담당자는 환경 변수를 복붙해 즉시 적용할 수 있습니다. 영문 Git·Docker 가속·Git·npm FAQ와 병행하세요.
① 장면 정의: pip·uv·conda — 언제 uv를 고를까
팀 표준은 한 번 정하면 러너 이미지·SSH 개발기·CI YAML에 동시에 반영해야 재현됩니다. 아래 표로 도구 선택을 고정하세요.
| 도구 | 적합 | 주의 |
|---|---|---|
| pip | 레거시 requirements·가벼운 venv | 병렬·락 재현은 수동 |
| uv | pyproject·uv.lock·ML 대량 휠 풀 |
conda 전용 바이너리 스택 |
| conda | 채널·비파이썬 바이너리 표준 | 경량 Py CI엔 오버헤드 |
1
UV_CACHE_DIR를 여유 디스크에 고정·문서화.
2
uv sync --frozen으로 재현 가능하면 uv 우선.
3
미러 전환 시 인덱스 URL을 dev·CI·SSH에 동일 적용.
② 실행 가능한 파라미터 매트릭스(병렬·타임아웃·캐시·미러)
값은 조직 회선에 맞게 조정하되, 변수 이름과 순서는 저장소 문서에 고정해 두면 온콜 시 추적이 쉽습니다.
| 항목 | 권장 출발값 | 설명 |
|---|---|---|
UV_CONCURRENT_DOWNLOADS |
8·불안 시 4 |
RTT 크면 과병렬→타임아웃 |
UV_HTTP_TIMEOUT |
300 |
대용량 휠·느린 미러 |
UV_CACHE_DIR |
~/Library/Caches/uv-ci 등 |
잡별 하위로 오염 분리 |
UV_INDEX_URL·UV_EXTRA_INDEX_URL |
승인 미러 | 순서를 로컬·CI 동일 |
복붙: 셸에서 원격 Mac CI 세션에 적용
export UV_CACHE_DIR="$HOME/Library/Caches/uv-ci"
export UV_HTTP_TIMEOUT=300
export UV_CONCURRENT_DOWNLOADS=8
export UV_INDEX_URL="https://pypi.org/simple"
# export UV_INDEX_URL="https://미러-승인-도메인/simple"
# export UV_EXTRA_INDEX_URL="https://사내-인덱스/simple"
uv sync --frozen
미러 지연 의심 시 공식 PyPI로 잠시 바꿔 A/B 비교하세요. 동일 스크립트로 성공률만 비교하면 원인 분리가 빨라집니다.
③ 국경 간 네트워크 실패 모드와 TLS·프록시 점검
증상이 간헐적이면 회선·프록시·병렬이 동시에 의심되므로 env와 인프라 로그를 같은 타임스탬프로 묶어 보관하세요.
- TLS: 키체인 우선, 허용 시
SSL_CERT_FILE·REQUESTS_CA_BUNDLE통일. - 프록시:
HTTPS_PROXY·HTTP_PROXY·NO_PROXY를 launchd·CI·SSH에 동일, 사내 레지스트리는NO_PROXY에 포함. - 리셋: 병렬·타임아웃↓,
SSLError는 CA·시계.
④ requirements·pyproject와 lockfile 정합성·CI 재현 단계
uv.lock은 인덱스 URL 정책과 함께 바뀌므로 미러 전환 PR에는 lock diff를 필수로 붙이세요.
1
uv lock→uv.lock 커밋.
2
CI는
uv sync --frozen만, 락 갱신은 별도 PR.
3
.python-version·CI python-version을 락 생성과 동일 마이너로.
4
requirements 흐름은
uv pip compile로 고정 파일 하나만 설치에 사용.
5
캐시 키에 lock 해시·
macosx_arm64 등 플랫폼 태그 포함.⑤ FAQ: 캐시 오염·플랫폼 wheel·사설 인덱스 혼용
캐시: 잡 ID 하위 UV_CACHE_DIR, 이상 시 디렉터리 삭제 후 uv sync --frozen. 공유 노드는 팀 간 캐시 경로를 분리하세요.
wheel: arm64 휠 없으면 sdist·CLT 고정 또는 Linux 분리. 빌드 실패 로그에 pip debug --verbose 한 줄을 남기면 원인 추적에 도움이 됩니다.
사설 인덱스: UV_EXTRA_INDEX_URL 순서·네임스페이스 문서화, lock diff 리뷰. 공개·사설 패키지 동명이인은 내부 접두사 규칙으로 예방하세요.
맺음말: 노드·회선·캐시를 한 번에 맞추기
인덱스·lock·타임아웃·캐시만 맞춰도 실패가 줄어듭니다. Git·npm·이미지까지는 영문 캐시·CI 가속 참고.
Python·uv CI를 안정적으로 돌릴 원격 Mac이 필요하신가요?
PyPI 미러·캐시·전용 디스크를 쓰는 MacPull 원격 Mac으로 휠 풀 실패를 줄이세요. 요금·고객 지원·블로그는 로그인 없이 이용할 수 있습니다.
uv·PyPI
전용 노드