3.3 Python 환경 관리: venv·pip·uv·conda

실습 · 연습문제 1개

가려진 패키지 찾기 shadowed-packages

import numpy는 sys.path의 디렉터리를 앞에서부터 보고 처음 찾은 numpy를 불러온다. 같은 패키지가 여러 디렉터리에 설치되어 있으면 뒤쪽 것은 가려져(shadowed) 쓰이지 않는다. 격리되지 않은 환경에서 pip install --user, 시스템 패키지, conda 환경이 섞이면 이런 일이 생기고, "분명히 설치했는데 버전이 다르다"는 증상으로 나타난다.

함수 find_shadowed(sys_path, installed)를 완성한다.

인자 의미
sys_path 검색 순서대로 나열한 디렉터리 목록
installed {디렉터리: {패키지 이름: 버전}} dict. sys_path에 없는 디렉터리가 들어 있을 수 있다

반환값은 두 곳 이상에서 발견된 패키지만 담은 dict다.

{패키지 이름: {"used": (버전, 디렉터리), "shadowed": [(버전, 디렉터리), ...]}}
  • used는 실제로 import되는 것(검색 순서상 첫 번째)이다.
  • shadowed는 가려진 것들을 검색 순서대로 담는다.
  • sys_path에 없는 디렉터리는 import 대상이 아니므로 무시한다.
  • 패키지 이름은 대소문자와 -·_를 구분하지 않는다(Scikit_Learn과 scikit-learn은 같은 패키지). 반환하는 키는 소문자로 바꾸고 _를 -로 바꾼 이름이다.