파이썬 externally-managed-environment 오류 해결: pip보다 먼저 설치 환경을 구분하는 법

터미널에서 pip install이 error: externally-managed-environment로 중단됐다면 시스템 Python에 설치를 강행하기보다, 지금 하려는 일이 프로젝트 라이브러리 설치인지 독립 CLI 설치인지 먼저 구분해야 합니다. 프로젝트 라이브러리는 보통 venv로 격리하고, 독립 명령줄 도구는 pipx 또는 운영체제 패키지 관리자를 검토하는 흐름이 안전합니다.

이 오류가 뜻하는 것

Python 환경에 EXTERNALLY-MANAGED 표시가 있으면 Python 바깥의 패키지 관리자가 그 기본 환경을 관리한다는 뜻입니다. 이 환경에서 pip가 전역 설치를 거부하는 것은 단순한 설치 실패가 아니라, OS 패키지 관리자와 pip가 같은 파일을 서로 덮어쓰는 상황을 피하기 위한 보호 장치입니다. 자세한 기준은 PEP 668에서 확인할 수 있습니다.

따라서 먼저 sudo pip install로 우회하거나 --break-system-packages를 습관처럼 붙이는 것은 적절한 첫 단계가 아닙니다. pip 공식 문서도 이 옵션이 외부 관리 환경을 수정하도록 허용하며, 다른 패키지 관리자가 설치한 패키지와 충돌하면 시스템이 깨질 수 있다고 경고합니다. 꼭 필요한 상황이라도 시스템의 관리 책임과 복구 방법을 확인한 뒤 판단해야 합니다.

설치 목적에 따라 경로를 나누기

설치하려는 것 우선 검토할 경로 이유
프로젝트에서 import할 라이브러리 프로젝트별 venv + 그 안의 python -m pip 프로젝트 의존성을 시스템 환경과 분리할 수 있습니다.
터미널에서 실행할 독립 Python CLI pipx 애플리케이션마다 별도 가상환경을 만들고 명령을 PATH에 노출합니다.
OS가 관리해야 하는 시스템 패키지 운영체제 패키지 관리자 시스템 Python과 OS 패키지 관리자의 책임 범위를 유지합니다.

프로젝트 라이브러리라면 venv

Python 공식 문서의 venv는 기존 Python과 별도의 패키지 설치 경로를 가진 가상환경을 만듭니다. 프로젝트 디렉터리에서 다음처럼 만들 수 있습니다.

python3 -m venv .venv
source .venv/bin/activate
python -m pip install 패키지이름

Windows에서는 활성화 명령이 다르므로 해당 환경의 Python을 직접 지정하는 방식도 사용할 수 있습니다. 핵심은 pip만 따로 부르지 않고, 설치와 실행에 같은 인터프리터를 사용하는 것입니다. venv의 생성 방식과 격리 동작은 Python 공식 venv 문서에 설명되어 있습니다.

설치 뒤에는 다음 두 명령으로 현재 가리키는 대상을 확인할 수 있습니다.

python -c "import sys; print(sys.executable); print(sys.prefix != sys.base_prefix)"
python -m pip --version

첫 번째 결과에서 실행 파일 경로가 프로젝트의 .venv 아래인지, 두 번째 결과의 pip 경로도 같은 환경을 가리키는지 확인하면 됩니다. 이미 다른 셸에서 활성화한 환경을 믿기보다, 실제 경로를 확인하는 습관이 운영에서 더 안전합니다.

독립 CLI라면 pipx 또는 OS 패키지 관리자

프로젝트 코드에서 import할 라이브러리가 아니라 터미널에서 실행하는 독립 Python 애플리케이션이라면 pipx가 목적에 더 가깝습니다. pipx는 애플리케이션별 가상환경에 설치하고 명령을 PATH에 노출하지만, 프로젝트 의존성 설치를 대신하는 도구는 아닙니다. 사용 가능 여부와 설치 방법은 운영체제별 공식 안내를 확인해야 하며, 특정 배포판의 패키지명이나 설치 성공을 여기서 일반화하지 않습니다. pipx 공식 문서에서 범위를 확인할 수 있습니다.

운영체제가 제공하는 시스템 도구나 배포판 패키지라면 OS 패키지 관리자를 우선 검토합니다. 이 경우에도 현재 운영체제와 배포판이 무엇인지, 원하는 패키지가 저장소에서 제공되는지 확인한 뒤 해당 관리자의 명령을 사용해야 합니다.

강행하기 전에 확인할 순서

  1. python 또는 python3가 가상환경 안의 실행 파일인지 확인합니다.
  2. 설치 대상이 프로젝트 라이브러리인지 독립 CLI인지 구분합니다.
  3. 프로젝트 라이브러리면 python -m venv .venv와 python -m pip 조합을 사용합니다.
  4. CLI면 pipx와 OS 패키지 관리자 중 운영체제 정책에 맞는 경로를 검토합니다.
  5. --break-system-packages가 정말 필요한 특수한 운영 조건인지, 시스템 패키지와 충돌했을 때 복구할 수 있는지 확인합니다.

이 순서를 따르면 오류 메시지를 없애는 데만 집중하지 않고, 누가 Python 환경을 관리해야 하는지까지 결정할 수 있습니다. 다음으로는 python과 pip가 같은 가상환경을 가리키는지, 또는 venv 안에서도 ModuleNotFoundError가 나는지 점검하는 글로 이어가면 좋습니다.

출처

Leave a Comment