C.W.K.
Stream
Lesson 07 of 10 · published

direnv — 디렉터리별 환경

~10 min · direnv, envrc, project

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

direnv 가 푸는 문제

~/projects/ai-app 안일 때만 OPENAI_API_KEY 가 설정되고, 나가면 풀리길 원해. 수동 export / unset 은 사고 잘 남. direnv 가 자동화 — 디렉터리에 .envrc 만들고 한 번 allow 하면 cd 마다 자동 load / unload.

설치

brew install direnv
# ~/.zshrc 끝에
eval "$(direnv hook zsh)"

사용

# ~/projects/ai-app 안
echo 'export OPENAI_API_KEY=sk-...' > .envrc
echo 'PATH_add bin' >> .envrc      # ./bin 을 PATH 에 추가
direnv allow                              # 일회성 승인
echo $OPENAI_API_KEY                      # 설정됨
cd /tmp
echo $OPENAI_API_KEY                      # 비어 있음

direnv allow 가 보안 게이트 — 무작위 .envrc 가 cd 만으로 자동 실행되지 않아.

흔한 .envrc 패턴

  • export DATABASE_URL=postgres://...
  • PATH_add ./bin — 프로젝트 bin 을 PATH 앞에 추가.
  • source_env ../shared.envrc — 상위의 env 공유.
  • layout python3 — venv 자동 생성 + 활성화.
  • use mise — 프로젝트별 mise 툴스택 다리.

대안 대비 우월한 점

수동 export 대비 direnv 는 나가는 길에 unset 절대 안 까먹어. dotfile 프레임워크 대비 작아 (binary 하나). docker-compose env 대비 즉시 — 컨테이너 기동 없음. Pippa 스택도 같은 이유로 cwkPippa 들어가면 conda env 자동 활성에 direnv 사용.

Code

프로젝트 .envrc 만들기·bash
cd ~/projects/myapp
cat > .envrc <<'EOF'
export DATABASE_URL=postgres://localhost/myapp
PATH_add bin
layout python3
EOF
direnv allow
which python3   # should be inside the venv now

External links

Exercise

direnv 설치 + .zshrc hook. 샌드박스 프로젝트에 .envrc (export FOO=bar) 쓰고 direnv allow. cd .. 후 다시 들어와서 변수 load / unload 확인. .gitignore 에 .envrc 추가.

Progress

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

댓글 0

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

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