macOS에서 pip install시 error: externally-managed-environment 에러가 발생하는 문제
macOS 사용 도중 파이썬 패키지를 설치하기 위해 pip를 사용하자 보안 경고가 발생하며 설치가 거부되었다. 이를 해결하는 방법에 대해 다룬다.
도대체 무슨 에러인가?
Python의 최신 PEP 668 표준에 의해, macOS 환경에서 pip를 통한 패키지 설치가 제약되는 문제라고 한다. 아무래도 최근에 애플에서 맥에 여러가지 보안 강화 조치와 제약이 추가되었는데 여기에 영향을 받은 패치가 아닐까 싶다.
이 문제를 해결하는 방법은 크게 3가지정도로 구분할 수 있다.
1. 가상 환경을 사용하는 방법
다음과 같이 Python 가상 환경을 만들어서 사용하면 독립된 공간을 만들어서 사용하기에 pip를 정상적으로 사용할 수 있게 되며 패키지의 버전 문제로 인한 충돌을 피하기도 쉽다. 하지만 매 파이썬 프로젝트마다 가상 환경을 생성해주어야하고 터미널을 열 때마다 source
를 지정해 주어야 한다는 번거로움이 따른다.
가상 환경 생성
python3 -m venv path/to/venv
가상 환경 활성화
source path/to/venv/bin/activate
패키지 설치
pip install supabase
2. pip에서 사용자 플래그 추가
시스템 패키지 환경을 보호하기 위해 설치를 사용자 환경으로 제한하여 설치하도록 한다.
그냥 귀찮음도 덜하고 보안도 챙기고 무난한 방법인듯하다.
pip install --user supabase
3. break-system-package 옵션 또는 pip.conf 수정
그냥 보안 권고사항을 무시하고 기존에 pip처럼 다이렉트 설치를 가능하게 하는 옵션을 붙여서 사용하면 된다.
pip install <package name> --break-system-packages
근데 매번 이 옵션을 붙이는것도 귀찮다면 아예 pip.conf
파일을 수정해서 영구적으로 해당 명령을 활성화 시키는것 역시 가능하다.
pip.conf
파일 생성
mkdir -p ~/.config/pip
vi ~/.config/pip/pip.conf
아래 내용을 추가한다.
pip install supabase --break-system-packages
왜 이런 보안조치가 시행되었는가?
애플이 원래도 보안쪽으로는 깐깐했지만 갑자기 이런 기존 시스템에 영향을 줄 수도 있는 패치를 한 원인이 궁금해서 찾아보니 간략하게 설명하자면 pip를 사용한 시스템 전역 패키지 설치가 운영 체제의 패키지 관리자와 충돌할 수 있어 이를 방지하려는 목적이라고 한다. 패키지를 가상 환경이나 사용자 환경에만 설치하도록 유도해서 종속성 관리 문제를 해결하고 보안 취약점을 줄이기 위한 조치인듯 하다.
마찬가지로 Homebrew
역시 현재 공식 홈페이지에 나와있는 Installation 방법을 따라하고 추가적인 수정을 거치지 않으면 명령어 인식이 안된다.