본문으로 바로가기
TaeyoungKim.dev

Python venv와 pip: 설치했는데 ModuleNotFoundError가 나는 이유

파이썬작성 약 3분 읽기TaeyoungKim
LinkedInX

pip install은 성공했는데 실행하면 ModuleNotFoundError가 난다면 설치와 실행에 서로 다른 Python이 쓰였을 수 있다. 패키지 이름보다 인터프리터 경로를 먼저 대조하는 편이 빠르다.

프로젝트마다 가상 환경을 만든다

도식의 두 경로가 다르면 설치는 성공해도 실행 중인 Python에서는 패키지를 찾지 못한다. 먼저 프로젝트 안에 가상 환경을 만들고 설치와 실행이 같은 인터프리터를 가리키게 하자.

bash
python3 -m venv .venv
source .venv/bin/activate
python -m pip install requests
python -m pip show requests

가상 환경은 프로젝트의 패키지를 시스템 Python과 분리한다. 활성화 후에도 pip 대신 python -m pip를 쓰면 지금 실행할 Python에 설치한다는 관계가 명확해진다.

예를 들어 터미널은 .venv의 Python을 쓰는데 IDE가 시스템 Python으로 파일을 실행하면 설치 직후에도 import가 실패한다. 가상 환경을 다시 만드는 전에 아래 세 경로가 어디를 가리키는지 비교하자.

경로를 직접 확인한다

bash
which python
python -c "import sys; print(sys.executable)"
python -m pip --version

세 결과가 같은 .venv를 가리키는지 본다. IDE의 실행 인터프리터도 터미널과 다를 수 있으므로 프로젝트 설정에서 가상 환경을 선택한다. 전역 패키지를 지우거나 시스템 Python을 바꾸기 전에 이 경로부터 확인하자.

bash
python -c "import requests; print(requests.__version__)"

마지막 줄이 성공하면 적어도 현재 터미널의 설치·실행 경로는 맞는다. IDE에서만 실패한다면 IDE가 사용하는 Python 경로를 sys.executable로 출력해 대조한다. 터미널과 IDE를 한 번에 고치려 하지 말고 서로 다른 실행 환경을 분리해 확인하는 편이 빠르다.

가상 환경 자체를 저장소에 올리기보다 필요한 패키지와 버전 범위를 별도 의존성 파일에 기록한다. 환경별 경로를 하드코딩하거나 sudo pip install로 시스템 환경을 건드리면 재현과 복구가 어려워진다. 팀에서 사용하는 Python 버전과 패키지 설치 명령을 함께 명시하자. 활성화가 어려운 자동화에서는 .venv/bin/python -m pip install requests와 .venv/bin/python app.py처럼 가상 환경의 인터프리터를 직접 지정할 수도 있다. Windows에서는 .venv\Scripts\python.exe 경로를 사용한다. 설치와 실행이 같은 인터프리터를 쓰는지가 핵심이다.

핵심 요약

설치 성공과 import 성공은 같은 인터프리터를 사용해야 연결된다. 프로젝트마다 venv를 만들고 python -m pip로 설치하며, 실행 Python·pip의 경로를 함께 확인하자. 재현 가능한 의존성 목록도 저장해 다른 환경에서 같은 설치를 만들 수 있게 한다.

작성자

TaeyoungKim

기초 개념을 구현과 검증, 실제 운영 판단까지 연결해 기록합니다.

#Python#venv#pip#ModuleNotFoundError

함께 읽으면 좋은 글