파이썬 가상환경 설정 번외 2편 – direnv 사용법 이용 자동화

direnv 사용법 이용 자동화 이미지

Python 虚拟环境을 배웠는데도 다음과 같은 가장 흔한 실수는 여전합니다.(그래서 direnv 사용법이 필요합니다.)

“아… activate 안 했네.”

이 실수는 실력 문제가 아니라 사람의 뇌 구조 문제예요. 우리는 매번 완벽하게 체크하지 못합니다.
그래서 생산성 높은 개발 습관의 핵심은 이거죠.

실수를 ‘훈련’으로 줄이지 말고, 구조로 없애자.

direnv는 바로 그 구조를 만들어줍니다.

1) Mac: direnv 사용법

Step 1. direnv 설치(Homebrew)

brew install direnv

Homebrew

Homebrew는 macOS (Linux 지원)의 패키지 매니저로, 터미널에서 소프트웨어를 쉽게 설치·업데이트·제거할 수 있게 해줍니다. App Store처럼 GUI 없이 brew install 한 줄로 Python, Node.js, Git, Docker 등 개발 도구를 최신 버전으로 관리하며, 의존성 자동 해결과 버전 관리까지 지원합니다.

Step 2. 쉘에 direnv 훅 연결(zsh 기준)

subl ~/.zprofile

파일 끝에 아래 한 줄 추가:

eval "$(direnv hook zsh)"

bash를 쓰면 ~/.bash_profile 쪽에 훅을 겁니다.

훅 연결? 훅 걸기?

“훅을 건다”는 건 direnv를 터미널(zsh)에 “자동 감시자”로 등록하는 걸 쉽게 말한 겁니다. 비유하자면 집에 자동 도어락과 같습니다. 내가 집에 들어갈 때 전자키로 도어락에 터치하면 문이 자동으로 열리듯이 direvn 사용법을 익히면 자동으로 파이썬 가상환경으로 들어갈 수 있습니다.
훅 없이:
cd myproject/ # 수동으로 해야 함
source venv/bin/activate # "집 들어올 때마다 직접 도어락 켜기"

훅 건 후:
cd myproject/ # 자동으로!
direnv: loading .envrc # "도어락이 알아서 켜짐"
(venv) % # 가상환경 자동 활성화

프로젝트 폴더 들어갈 때마다 가상환경 자동 활성화, 나갈 때 자동 비활성화! 매번 source activate 치는 고통에서 해방됩니다.

Step 3. 프로젝트 루트에 .envrc 만들기

프로젝트 폴더에서 서브프라임 명령을 이용하여 .envrc 를 만들고 오픈합니다.

subl .envrc

.envrc에 아래 내용(가장 단순 버전)

source .venv/bin/activate

Step 4. 보안상 “허용”해주기

direnv allow

Step 5. 체감 포인트

  • 프로젝트 폴더에 cd로 들어가면 자동으로 활성화
  • 폴더를 빠져나오면 자동으로 비활성화
  • 이제부터 “activate를 깜박하는 사고”가 확 줄어듭니다.

2) Windows: direnv는 선택(대안 루틴 제안)

Windows는 direnv를 그대로 쓰는 방식이 환경마다 달라질 수 있어요(WSL 사용 여부 등).
그래서 현실적으로는 아래 중 하나를 추천합니다.

선택 A) WSL을 쓰는 경우(추천)

  • WSL 안에서는 Mac/Linux와 거의 동일하게 direnv 루틴을 적용 가능

선택 B) WSL 없이 Windows만 쓰는 경우(실전 대안)

  • Windows Terminal 프로필에 “프로젝트별 시작 디렉토리 + 자동 실행 스크립트”를 두거나
  • PowerShell 프로필에 helper 함수(예: work myproj)를 만들어 “들어가며 activate”하도록 루틴화

이건 사용 환경에 따라 갈래가 나뉘어서, 별도로 포스트를 만들어서 공유하도록 하겠습니다.

3) 자동화 루틴이 주는 ‘창의적 이점’

direnv 사용법 활용으로 가상환경 자동 활성화를 하면 재미있는 변화가 생깁니다.

  • 가상환경을 “켜는 행위”가 사라지니
  • 머릿속이 환경 체크 대신 문제 해결/아이디어에 쓰입니다.
  • 협업에서도 “네가 activate 안 해서 그래” 같은 말이 줄어듭니다.

결국 자동화는 편하자고 하는 게 아니라,
사고력(통찰력)을 환경 잡일에서 해방시키는 장치입니다.

类似文章