2강 개념 중심 ⏱ 약 15분

 

0. 학습 목표

→ 내 컴퓨터에 존재하는 여러 Python을 구분하고, 가상환경이 왜 필수인지 이해합니다.

더보기

이번 글은 개념 중심 강의입니다.

 

1강에서 개발자는 "이 코드가 어떤 환경에서 실행되는가"를 물어야 한다고 했습니다.

이번 강의에서는 그 질문을 Ubuntu의 Python에 그대로 적용합니다.

 

여러분의 Ubuntu에는 이미 Python이 설치되어 있고,

앞으로 개발을 진행하면 한 컴퓨터 안에 여러 Python이 함께 존재하게 됩니다.

이들을 구분하지 못하면 "내 코드가 어느 Python에서 실행되는지" 답할 수 없습니다.

 

이번 강의에서는 Python 환경을 시스템 · 전역 · 가상환경 세 가지로 구분하해 봅니다.

그중 시스템 Python을 직접 수정하면 안 되는 이유를 확인합니다.

이 3단 구분은 시리즈 전체에서 계속 재사용되는 기준입니다.

구분 내용
이해할 것 시스템 Python이 운영체제의 일부인 이유, 직접 수정하면 생기는 문제
정리할 것 시스템 · 전역 · 가상환경 Python의 3단 구분 기준
확인할 것 "운영체제의 Python"과 "내 프로젝트의 Python"을 분리해야 한다는 결론

 

1. 🐍 세 가지 Python 환경 구분하기

→ 한 컴퓨터 안에 공존하는 Python들을 역할에 따라 세 가지로 나눕니다.

더보기

Python 환경을 크게 세 가지로 나누어 이해하면 좋습니다.

 

Python 환경은 크게 1) 시스템 Python, 2) 전역 Python, 3) 가상환경 Python으로 나누어 이해할 수 있습니다.

 

구분 비유 예시 역할
시스템 Python 건물 관리용
기본 출입 시스템
/usr/bin/python3 / 운영체제가 기본적으로 사용하는 Python
전역 Python 사용자가 평소 사용하는 공용 출입카드 /usr/local/bin/python3.11 / 사용자가 개발용으로 별도 설치하거나 기본으로 선택한 Python
가상환경 Python 특정 상황시 사용 가능한 출입코드 project/.venv/bin/python / 특정 프로젝트에서만 사용하는 독립 Python 환경


시스템 Python은 운영체제가 기본적으로 사용하는 Python입니다. Ubuntu에서는 보통 /usr/bin/python3 경로에 위치하며, 운영체제 기능이나 패키지 관리 도구와 연결되어 있을 수 있습니다. 따라서 함부로 변경하지 않는 것이 좋습니다.

(도어락의 기본 비밀번호처럼 절대 변경되어서는 안되는 시스템의 파이썬입니다.)

전역 Python은 가상환경에 들어가지 않은 상태에서 사용자가 공통으로 사용하는 Python입니다. 사용자가 개발 편의를 위해 Python 3.11 같은 버전을 별도로 설치하고 기본 호출될 Python 설정하여 사용되는 파이썬 입니다. 

(도어락의 사용자가 입력한 비밀번호처럼, 앞으로 공통으로 사용될 공통 파이썬입니다.)

가상환경 Python은 특정 프로젝트 안에서만 사용하는 독립 Python 환경입니다. 보통 project/.venv/bin/python 같은 형태로 존재하며, 프로젝트마다 필요한 Python 버전과 패키지 버전을 따로 관리할 수 있습니다.

(도어락의 임시 사용자가 사용할 하루, 이틀 정도 유효한 임시 비밀번호처럼, 프로젝트별으로 사용될 독립 파이썬입니다.)

 

이 중에서, 시스템 Python 가상환경 Python을 기준으로 설명하겠습니다.

 

2. 시스템 Python은 운영체제의 일부다

→ Ubuntu에 Python이 처음부터 설치되어 있는 이유를 확인합니다.

더보기

Ubuntu에는 일반적으로 Python3 계열이 기본 설치되어 있습니다.

그래서 사용자가 아무것도 설치하지 않아도 터미널에서 다음 명령이 동작합니다.

python3 --version

 

Ubuntu가 Python을 미리 설치해 두는 이유는 개발자를 위해서가 아닙니다.

운영체제 자신이 Python을 사용하기 때문입니다.

Ubuntu의 일부 시스템 도구, 관리 스크립트, 패키지 관련 기능이 Python으로 작성되어 있습니다.

 

Python을 사용하는 곳 설명
시스템 관리 도구 운영체제 내부 기능이나 관리 스크립트 실행
패키지 관리 관련 기능 프로그램 설치, 설정, 관리 과정의 일부
자동화 스크립트 반복 작업 처리
개발 도구 Python 기반 명령어 또는 유틸리티 실행

따라서 Ubuntu에 기본 설치된 Python은 단순한 개발 도구가 아니라 운영체제 환경의 일부입니다.

이것을 시스템 파이썬(System Python)이라고 부릅니다. 이 사실이 다음 섹션의 문제 상황으로 바로 이어집니다.

 

3. 문제 상황 — System Python을 수정하면 생기는 일

→ 시스템 Python을 삭제하거나 교체했을 때 운영체제에 미치는 영향을 확인합니다.

더보기


개발을 하다 보면 이런 생각이 들 수 있습니다.

 

"나는 Python 3.13을 쓰고 싶은데, 기본 python3가 다른 버전이네? 그냥 기본 python3를 3.13으로 바꿔버리면 되지 않을까?"

 

예를 들어 다음과 같은 명령입니다.

# ⚠️ 예시일 뿐입니다 — 절대 따라 하지 마세요
sudo rm /usr/bin/python3                            # 시스템 Python 삭제
sudo ln -sf /usr/bin/python3.13 /usr/bin/python3    # 기본 python3를 3.13으로 강제 교체

 

운영체제는 내부적으로 특정 Python 버전과 경로를 기준으로 동작하는 도구들을 가지고 있습니다.

그런데 개발자가 System Python을 삭제하거나 특정 버전의 Python 버전으로 바꾸면, 운영체제 입장에서는 원래 있어야 할 Python을 찾지 못하거나 예상과 다른 버전으로 실행하게 됩니다.

 

시스템 Python 삭제/교체
        ↓
OS 내부 도구가 기존 버전 기준으로 동작을 시도
        ↓
버전 불일치 · 경로 불일치 발생
        ↓
내 프로젝트만이 아니라
Ubuntu 시스템 기능 자체가 오작동할 수 있음      ← 문제의 핵심

 

즉, 이것은 "내 프로젝트에서 오류가 나는" 수준의 문제가 아닙니다.

패키지 관리 도구가 멈추거나 시스템 업데이트가 실패하는 등 운영체제 전체에 영향을 줄 수 있습니다.

도어락 비유로 돌아가면, 관리실의 마스터 비밀번호를 내 마음대로 바꿔버린 상황과 같습니다.

 

4. 해결책 — 환경을 분리한다

→ 시스템 Python은 그대로 두고, 프로젝트 전용 환경을 따로 만든다는 원칙을 세웁니다.

더보기

문제의 원인이 "운영체제의 Python과 내 프로젝트의 Python을 같은 공간에서 섞어 쓰는 것"이므로, 해결책은 분리입니다.

 

공간 원칙
Ubuntu 기본 Python 운영체제 전용 작업 공간 — 건드리지 않고 그대로 둔다
가상환경 (venv) 내가 프로젝트별로 따로 쓰는 개인 작업 공간 — 여기서 개발한다

 

이렇게 프로젝트별로 별도의 Python 환경을 분리하는 방법이 Python 가상환경(venv)입니다.

그리고 이 분리는 특별한 고급 기법이 아니라, Python 개발의 기본 사용법입니다.

 

- 한 컴퓨터에는 시스템 · 전역 · 가상환경 Python이 공존할 수 있다
- 시스템 Python은 운영체제의 일부다 — 삭제·교체 금지
- 프로젝트 개발은 가상환경 안에서 한다 — 이것이 기본 사용법이다

 

🚨 주의

  • 시스템 Python과 프로젝트용 Python을 같은 공간에서 섞어 쓰면, 패키지 충돌, 실행 오류, 경로 문제로 이어질 수 있습니다. 
  • 즉, Ubuntu에서는 [1]시스템 Python [2]프로젝트용 Python을 분리하는 습관이 중요합니다.
  • 외부 패키지는 가능하면 가상환경(venv) 안에서 설치합니다.

 

→ 다음 강의 (3강): 이번 강의에서 세운 "분리" 원칙을 실행에 옮길 준비를 합니다. python3 · pip · venv 설치 상태를 확인하고, python3라고 입력했을 때 셸이 어떤 경로의 실행 파일을 찾아 실행하는지 — 가상환경의 동작 원리가 되는 PATH 검색을 이해합니다.