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

기술 · 실용 가이드

pip에는 설치됐는데 ModuleNotFoundError? interpreter와 import path를 증명하세요

실패한 process의 Python을 확인하고 그 interpreter의 distribution, 실제 import name과 sys.path를 검증한 뒤 clean import로 종료합니다.

ko interpreter, distribution, import name and sys.path evidence diagram
원본 일러스트: prove one runtime-bound evidence chain. Watch at Ease

pip 설치 성공과 import 실패는 서로 다른 interpreter, 이름 또는 search path를 가리키면 동시에 참일 수 있습니다.

실패 process의 absolute Python에서 시작해 metadata, name mapping, path resolution과 module origin을 차례로 증명합니다.

실패 runtime 보존

정확한 failure command, working directory와 traceback을 보존하고 같은 launch path에서 sys.executable, version, prefix, base_prefix와 sys.path를 출력합니다. IDE, notebook, service, shebang은 다른 interpreter를 고를 수 있습니다.

처음부터 sudo pip, --user, global PYTHONPATH나 site-packages 복사를 쓰지 않습니다. failed process가 보고한 absolute executable이 첫 증거입니다.

그 interpreter에서 distribution 확인

/absolute/python -m pip show <distribution>으로 Name, Version, Location과 필요 시 --files를 기록합니다. 다른 pip의 성공은 이 runtime의 증거가 아닙니다.

해당 interpreter에 distribution이 없으면 lock을 검토해 target environment에 설치합니다. Location이 sys.path 밖이면 activation, user site, pyvenv.cfg, service나 container를 조사합니다.

distribution과 import name 분리

pip는 distribution name을, import는 import package name을 사용합니다. 일대일이 아니며 Pillow는 PIL로 import합니다.

project docs와 installed files를 확인하고 packages_distributions()도 사용합니다. 잘못된 import name만으로 install 실패라고 판단하지 않습니다.

search path를 설명하고 patch하지 않기

sys.path는 script/current directory, environment, executable landmarks, venv config와 site processing으로 구성됩니다. python -m site로 user site를 기록합니다.

service는 user site를 끌 수 있고 IDE/kernel은 오래됐으며 shebang은 다른 executable을 가리킬 수 있습니다. 최소 launcher boundary만 고칩니다.

shadowing 제거와 exit proof

project의 동명 file/folder를 확인하고 find_spec과 성공 후 module.__file__로 local shadowing을 배제합니다.

같은 executable이 intended Location과 import origin을 보여 주고 clean process 및 원래 script/test가 통과해야 종료합니다. 모든 증거를 저장합니다.

ko Python import repair and clean exit-proof diagram
원본 일러스트: repair the smallest boundary and prove a clean import. Watch at Ease