C.W.K.
Stream
Lesson 05 of 05 · published

pip Wisdom

~9 min · pip, wisdom, production

Level 0초심자
0 XP0/55 lessons0/16 achievements
0/80 XP to next level80 XP to go0% complete

pip 이 이 quest 에서 가장 많이 쓰이고 가장 많이 잘못 쓰이는 도구. 이 룰들이 환경 작동하는 Python 개발자와 매일 환경과 싸우는 사람 가름.

항상 virtual environment 사용. 절대 sudo pip 안 됨. 글로벌하게 패키지 install 하면 시스템 Python lib 와 섞이고 둘 다 깨짐. 모든 Python 프로젝트가 자기 venv 받을 가치 있음.

python3 -m venv 사용, virtualenv 아님. stdlib venv module 이 빌트인이고 충분히 좋음. third-party virtualenv 패키지가 대부분 사용자 안 필요한 기능 추가, Python 2 시대의 잔재.

pip 에서 진짜 재현성 필요하면 pip-tools 사용. pip-compile 이 작은 requirements.in 을 fully-pinned requirements.txt 로. strict 재현성 원하지만 아직 uv 로 전환 못 하는 프로젝트에 옳은 답.

새 Python 프로젝트엔 uv 고려. uv 가 10-100배 빠름, 진짜 lockfile 가짐, Python 버전 관리, pip + venv + pip-tools + pyenv + pipx 한 binary 로 대체. 다음 트랙 전용.

macOS PEP 668 신경. 새 macOS Python 이 시스템 도구 깨뜨리는 거 막으려고 글로벌 pip install 제한. 에러는 'externally-managed-environment'. 옳은 fix 는 venv 사용. 잘못된 fix 가 --break-system-packages.

Code

PEP 668 — externally-managed 에러·bash
# 증상
pip install requests
# error: externally-managed-environment
#
# This environment is externally managed
# To install Python packages system-wide, try ...

# 옳은 fix: venv 사용
python3 -m venv .venv
source .venv/bin/activate
pip install requests

# 잘못된 fix: --break-system-packages 로 우회
# 하지 마. flag 이름 그대로.
direnv 로 venv 자동 활성화·bash
# direnv install
brew install direnv

# ~/.zprofile 에 hook 추가
echo 'eval "$(direnv hook zsh)"' >> ~/.zprofile

# 프로젝트 root 에 .envrc 만들기
echo 'source .venv/bin/activate' > .envrc
direnv allow

# 이제: 프로젝트로 cd 하면 venv 자동 활성화.
# cd 나가면 venv 자동 비활성화.

External links

Exercise

direnv install, shell 에 hook, 한 Python 프로젝트가 cd 시 venv 자동 활성화하도록 설정. 디렉토리에 처음 cd 해서 venv 가 타이핑 없이 활성화되는 거 보면 다신 venv 자동 활성화 없이 Python 프로젝트 셋업 안 함.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.