Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

pip wheel에 .dist-info가 여러 개라면? 환경 삭제 전에 아카이브부터 확인

이 검증 오류는 열고 있는 wheel에 관한 것입니다. 정확한 파일을 보존하고 압축 해제 없이 ZIP을 나열한 뒤 별도 다운로드와 비교하세요.

단일·복수 메타데이터 루트와 설치 환경 경고를 구분하는 개념도.
오리지널 편집 일러스트: 환경 변경 전에 wheel ZIP을 확인하세요. Watch at Ease

invalid wheel, multiple .dist-info directories 오류에서는 site-packages를 지우기 전에 해당 wheel을 확인해야 한다. 현재 pip는 ZIP의 최상위 이름을 모아 메타데이터 디렉터리가 여러 개면 거부한다. 설치된 환경의 invalid distribution 경고는 다른 진단 경로다.

실패 파일과 실행 환경 보존

오류 전문, .whl 이름, 요청 패키지·버전, Python 실행 파일과 python -m pip --version을 기록한다. 인덱스·직접 URL·로컬 wheelhouse·소스 빌드 중 어디서 왔는지도 남긴다. 직접 지정한 패키지 대신 의존성이 실패했을 수 있다.

환경 밖에 사본을 보관하고 python -m pip hash 뒤에 따옴표 경로를 넣어 SHA-256을 기록한다. 공유 로그의 자격 증명은 제거한다. 같은 이름이 미러·캐시·상류의 동일 바이트를 뜻하지 않는다.

추출·실행하지 않고 ZIP 목록 확인

python -m zipfile -l 뒤에 따옴표 wheel 경로를 사용한다. 멤버 이름의 첫 부분을 보고 .dist-info로 끝나는 서로 다른 최상위 루트를 기록한다. 같은 메타데이터 폴더 안의 여러 파일은 정상이며 여러 루트가 조사 대상이다. 목록과 해시를 함께 보존한다.

선택적인 python -m zipfile -t는 ZIP 무결성을 검사한다. CRC·헤더 통과는 pip 구조 승인, 발행자 진위, 전체 RECORD 해시를 증명하지 않는다. ZIP을 읽을 수 없으면 파일부터 조사하고 site-packages에 직접 추출해 우회하지 않는다.

별도 wheel 다운로드와 비교

같은 인터프리터와 승인 인덱스로 빈 비교 디렉터리에 python -m pip download --no-deps --only-binary=:all: --no-cache-dir --dest wheel-check 뒤 정확한 따옴표 요구사항을 넣는다. 호환 wheel만 내려받고 설치하지 않으며 없으면 실패한다. 무관한 옛 버전을 복사하지 않는다.

이름·해시·메타데이터 루트를 비교한다. 같은 잘못된 파일이면 캐시를 더 지워도 상류가 고쳐지지 않는다. 다르면 경로·미러·빌드 산출물·파일 선택을 조사한다. 해시 차이만으로 어느 쪽이 진짜인지 판단할 수 없다.

릴리스 선택을 고친 뒤 앱 검증

반복되는 배포 파일 문제는 관리자에게 버전·이름·비밀을 제거한 출처·해시·목록·Python/pip 정보를 제공한다. 의존 요구를 확인해 수정 릴리스나 호환 제약을 선택한다. 소스 빌드는 별도 도구 체인 작업이다.

ZIP의 .dist-info 하나를 지워 원본 배포물처럼 취급하지 않는다. 메타데이터와 RECORD는 연결되어 있으며 입력 파일 불량이 기존 메타데이터 삭제 근거는 아니다. 일회용 환경에서 실제 requirements로 설치하고 python -m pip check와 앱 기본 테스트를 한다. 의존 해결 성공은 앱 호환성 증명이 아니다.

파일 보존·별도 다운로드 비교·대체 검증 흐름도.
오리지널 편집 일러스트: 보존·비교 후 실제 앱을 검증하세요. Watch at Ease