Skip to main content

Command Palette

Search for a command to run...

250829

Published
•3 min read•View as Markdown

터미널 환경 마스터하기: Python 가상환경부터 PATH의 비밀까지

Python 코딩 연습 플랫폼 Exercism을 CLI로 시작하면서 마주친 여러 궁금증을 해결한 과정을 기록합니다. 이 과정에서 Python 가상환경의 올바른 사용법, VS Code와 터미널의 연동, 그리고 가장 중요하게는 PATH 환경 변수의 동작 원리를 깊이 이해할 수 있었습니다.

1. Python 프로젝트와 가상 환경: uv 활용법

Python 프로젝트를 시작할 때, 의존성 격리를 위해 가상 환경을 사용하는 것은 필수입니다.

핵심 원칙: 하나의 프로젝트 폴더에는 하나의 가상 환경을 만듭니다. 여러 프로젝트가 하나의 가상 환경을 공유하게 하지 않습니다.

  • 가상 환경 생성 (uv 사용)

    Bash

      # 해당 프로젝트 폴더로 이동
      cd Exercism/python/hello-world
    
      # 가상 환경 생성
      uv venv
    
  • 가상 환경 활성화

    Bash

      # macOS / Linux
      source .venv/bin/activate
    
  • 테스트 실행

    • unittest: Python 내장 모듈이므로 별도 설치 없이 바로 실행합니다.

      Bash

        python -m unittest <테스트_파일.py>
      
    • pytest: 서드파티 라이브러리이므로 설치 후 실행합니다.

      Bash

        uv pip install pytest
        pytest
      

2. 터미널에서 VS Code 바로 실행하기

터미널에서 code . 명령어로 현재 폴더를 VS Code에서 여는 것은 작업 효율을 크게 높여줍니다.

  • 설정 방법

    1. VS Code에서 명령 팔레트 열기 (Cmd+Shift+P 또는 Ctrl+Shift+P)

    2. shell command 검색

    3. Shell Command: Install 'code' command in PATH 선택

3. PATH 환경 변수 깊이 파헤치기

code 명령어는 어떻게 .zshrc 수정 없이 동작할까요? 그 비밀은 PATH와 심볼릭 링크에 있습니다.

code 명령어의 위치

code 명령어는 .zshrc에 등록된 alias가 아니라, PATH에 포함된 디렉터리(주로 /usr/local/bin)에 생성된 심볼릭 링크(Symbolic Link)입니다.

  • 위치 확인

    Bash

      # 명령어의 전체 경로 확인
      which code
      # 출력 예시: /usr/local/bin/code
    
  • 심볼릭 링크 정보 확인

    Bash

      # 해당 파일이 무엇을 가리키는지 확인
      ls -l $(which code)
      # 출력 예시: /usr/local/bin/code -> /Applications/Visual Studio Code.app/...
    

PATH의 구성 원리: 우선순위의 비밀

PATH는 시스템 설정과 사용자 설정이 결합되어 만들어지며, 사용자 설정이 더 높은 우선순위를 가집니다.

  1. 시스템 기본 PATH 로드: 셸이 시작되면 /etc/paths 등의 파일에서 시스템의 기본 PATH를 가져옵니다. (예: /usr/bin, /bin)

  2. 사용자 PATH 적용: 그 후 ~/.zshrc 파일을 읽어 PATH를 수정합니다. 보통 아래와 같은 형식으로 기존 PATH의 맨 앞에 새로운 경로를 추가합니다.

    Bash

     # /new/path가 기존 $PATH보다 앞에 위치하게 되어 우선순위가 높아진다.
     export PATH="/new/path:$PATH"
    

가상 환경 활성화와 PATH

Python 가상 환경 활성화는 바로 이 PATH의 우선순위 원리를 이용합니다.

source .venv/bin/activate 명령어는 현재 가상 환경의 bin 폴더를 PATH 변수의 가장 맨 앞에 추가하는 역할을 합니다.

이로 인해 터미널에 python을 입력하면, 시스템의 /usr/bin/python보다 가상 환경의 .venv/bin/python이 먼저 발견되어 실행됩니다.

4. 나만의 커스텀 명령어 만들기

VS Code가 아닌 다른 프로그램도 터미널 명령어로 실행하고 싶다면, code 명령어의 원리를 응용해 직접 만들 수 있습니다.

  1. 실행 파일 경로 확인: 앱의 실제 실행 파일 위치를 찾습니다.

    (예: /Applications/MyEditor.app/Contents/MacOS/MyEditor)

  2. /usr/local/bin에 셸 스크립트 생성:

    Bash

     # /usr/local/bin에 'myeditor'라는 이름의 파일 생성
     sudo nano /usr/local/bin/myeditor
    
     # 파일 내용 작성 (macOS 기준)
     #!/bin/sh
     open -a "MyEditor" --args "$@"
    
  3. 실행 권한 부여:

    Bash

     sudo chmod +x /usr/local/bin/myeditor
    

이제 터미널을 재시작하면 myeditor . 와 같은 명령어를 사용할 수 있습니다.

More from this blog

250902

LeetCode의 "Count Substrings That Satisfy K-Constraint I" 문제를 처음 접했을 때, 저는 일단 완전탐색(브루트포스) 방식으로 접근했습니다. 이중 for문을 돌면서 모든 substring을 만들고 각각의 0, 1의 개수를 직접 세는 방식이었죠. 하지만 입력이 조금만 커져도 금방 TLE가 뜰 정도로 매우 느렸고, 효율적인 방법이 필요하다는 사실을 절감했습니다. 이때 누적합(Prefix Sum)이라는 방식을...

Sep 2, 20255 min read

250901

파이썬 핵심 개념 정리: 철학부터 동작 원리까지 파이썬을 공부하며 알게 된 핵심적인 개념과 그 이면에 있는 설계 철학을 정리합니다. 단순한 문법을 넘어 파이썬이 '왜' 이렇게 동작하는지 이해하는 데 초점을 맞춥니다. 1. 파이썬의 4가지 핵심 타입 시스템 특징 ### 동적 타이핑 (Dynamic Typing) 변수의 타입이 코드가 실행되는 시점(런타임)에 결정됩니다. 변수는 특정 타입에 묶이지 않고, 다양한 타입의 객체를 가리킬 수 있는 '...

Sep 1, 20252 min read

250828

시작: 작은 혼란과 한 번의 실수 모든 것은 uv라는 새로운 파이썬 도구를 사용해보려던 시도에서 시작됐다. uv venv와 uv init, 두 가지 워크플로우 앞에서 나는 혼란스러웠고, 기존에 쓰던 방식을 정리하기로 했다. 그리고 바로 그때, 나는 실수를 저질렀다. 가상 환경을 deactivate 하지 않은 채, rm -rf .venv 명령어로 폴더를 통째로 삭제해버렸다. 터미널 프롬프트에는 여전히 (.venv)가 떠 있었다. 하지만 실제 ...

Aug 28, 20253 min read

250827

Python 개발 환경 완벽 가이드: 최종 정리본 🚀 이 문서는 파이썬 개발 환경을 구성하는 다양한 도구들의 역할과 상호작용, 그리고 현대적인 개발 워크플로우를 처음부터 끝까지 체계적으로 정리한 종합 가이드입니다. 1. 근본적인 질문: 왜 이렇게 복잡할까? 🤔 파이썬 개발 환경 설정의 모든 복잡성은 두 가지 핵심 문제를 해결하기 위해 존재합니다. 버전 충돌: 프로젝트 A는 파이썬 3.9, 프로젝트 B는 파이썬 3.12가 필요한 상황. 의...

Aug 27, 20253 min read

TIL: Today I Learning

9 posts