요즘 Python으로 API 서버나 간단한 CLI 도구를 만들 일이 많아지면서, Python 생태계도 슬슬 익숙해져야겠다는 생각이 들었다. 그러다 발견한 도구가 바로 Poetry. 처음엔 “뭐지 이게? pip이랑 venv 쓰면 되는 거 아냐?” 싶었는데, 조금만 살펴보니 Swift의 SPM이랑 굉장히 유사한 방식으로 프로젝트를 관리할 수 있게 도와주는 툴이었다.
그래서 설치를 시작했는데…
바로 PermissionError를 맞았다.
Poetry는 Python 생태계에서 요즘 가장 핫한 패키지 및 의존성 관리 도구다. 아래 표를 보면 어떤 개발자에게 적합한 도구인지 직관적으로 이해할 수 있다:
기능 | 설명 |
패키지 관리 | requests, flask 등 외부 라이브러리 설치 |
버전 고정 | requests = "^2.31.0"처럼 명시적 버전 관리 |
가상환경 생성 | 프로젝트 별로 독립된 venv 자동 생성 |
빌드/배포 지원 | poetry build, poetry publish 등 |
표준화된 설정 파일 | pyproject.toml 하나로 모든 설정 |
Swift의 SPM처럼 하나의 파일로 모든 의존성과 스크립트를 정의할 수 있어서 팀 프로젝트나 협업에서도 매우 유용해 보였다.
Poetry 설치 스크립트를 실행하자마자 아래와 같은 에러가 떴다.
PermissionError: [Errno 13] Permission denied: '/Users/bloom/.local/bin'
이게 뭘까? .local/bin 디렉토리에 뭔가를 설치하려는데 권한이 없단다. 내 홈 디렉토리인데 왜?
알고 보니 macOS에서 .local/bin은 가끔 루트(root) 소유가 되어버리는 경우가 있다고 한다. 다음과 같은 상황이 그 원인일 수 있다고 한다:
게다가 macOS에는 **SIP(System Integrity Protection)**이라는 보안 메커니즘이 있어서, 민감한 경로에 대해 Apple이 감시하는 것처럼 오인받으면 설치 자체가 막힐 수도 있다고 한다.
💡 참고: sudo로 설치하면 해당 디렉토리 소유권이 root가 되어버림 → 이후 일반 유저 권한으로 접근 불가
macOS의 파일 시스템 권한 구조를 간단히 정리하면 다음과 같다:
경로 | 접근권한 | 설명 |
/System, /usr/bin | 관리자(root) 전용 | 시스템 핵심 파일 |
/Applications | 관리자만 설치 가능 | 전역 앱 설치 위치 |
~/ (홈 디렉토리) | 사용자 본인만 | 개인 설정 및 개발환경 |
~/.local/bin | 원래는 사용자 전용 | 권한 꼬이면 root가 소유자가 됨 |
즉, .local/bin도 원래는 내가 자유롭게 쓰는 경로지만, 한번이라도 sudo로 뭔가 설치했거나 특수한 상황이 있었다면 root가 소유하게 되어 문제가 생길 수 있다는 것이다.
처음엔 좀 무섭기도 했다. “내가 소유권을 가지는만큼 자유롭지만 그만큼 위험한 거 아냐?”
맞는 말이다. 하지만 Poetry는 그만한 가치가 있는 도구다.
그래서 결론은 그래도 해야지 뭐.
Poetry는 Swift 개발자인 나에게도 꽤나 익숙한 개발 방식으로 Python 프로젝트를 관리하게 해주는 좋은 도구였다. 단, 설치 과정에서 macOS의 권한 시스템을 이해하지 못하면 막힐 수 있다는 걸 배웠다.
혹시 설치 중 비슷한 PermissionError를 만났다면, 다음 순서를 참고하자:
1. local/bin 디렉토리의 소유자를 확인하고
ls -l ~/.local
2. 필요 시 소유자를 변경
sudo chown -R $(whoami) ~/.local
3. Poetry 설치 다시 시도
curl -sSL https://install.python-poetry.org | python3 -
Poetry 설치 하나로도 이렇게 많은 걸 배우게 될 줄은 몰랐다. Python 생태계로 넘어가는 문턱에서 이런 경험을 남겨두면, 나중에 돌아봤을 때 좋은 기록이 될 것 같다.
이 글이 같은 문제를 겪는 누군가에겐 작은 도움이라도 되기를.
TMDB에서 생긴일 -3 (PassthroughSubject) (0) | 2025.05.24 |
---|---|
TMDB에서 생긴일 - 2 (0) | 2025.05.24 |
TMDB에서 생긴일 - 1 (0) | 2025.05.11 |