2. [Ubuntu] 가상환경이 필요한 이유

0. 학습 목표
이번 학습에서는 Ubuntu에서 Python 개발을 시작할 때, 왜 가상환경이 필요한지 이해합니다.
이를 통해 System Python을 직접 수정하면 안 되는 이유,
Python 버전 차이로 발생할 수 있는 문제,
그리고 가상환경이 이러한 문제를 해결하는 방법을 이해합니다.
마지막으로 앞으로 진행할 실습 순서에 대해 정리합니다.
1. 🐍 세 가지 Python 환경 구분
Python 환경을 크게 세 가지로 나누어 이해하면 좋습니다.
| 구분 | 비유 | 예시 | 역할 |
| 시스템 Python | 건물 관리용 기본 출입 시스템 |
Ubuntu의 /usr/bin/python3 / Python 3.12 |
운영체제가 기본적으로 사용하는 Python |
| 전역 Python | 사용자가 평소 사용하는 공용 출입카드 | /usr/local/bin/python3.11 / pyenv global Python |
사용자가 개발용으로 별도 설치하거나 기본으로 선택한 Python |
| 가상환경 Python | 프로젝트 전용 출입코드 |
project/.venv/bin/python / Python 3.11 기반 .venv |
특정 프로젝트에서만 사용하는 독립 Python 환경 |
Python 환경은 크게 1) 시스템 Python, 2) 전역 Python, 3) 가상환경 Python으로 나누어 이해할 수 있습니다.
시스템 Python은 운영체제가 기본적으로 사용하는 Python입니다. Ubuntu에서는 보통 /usr/bin/python3 경로에 위치하며, 운영체제 기능이나 패키지 관리 도구와 연결되어 있을 수 있습니다. 따라서 함부로 변경하지 않는 것이 좋습니다.
(도어락의 기본 비밀번호처럼 절대 변경되어서는 안되는 시스템의 파이썬입니다.)
전역 Python은 가상환경에 들어가지 않은 상태에서 사용자가 공통으로 사용하는 Python입니다. 사용자가 개발 편의를 위해 Python 3.11 같은 버전을 별도로 설치하고 기본 호출될 Python 설정하여 사용되는 파이썬 입니다.
(도어락의 사용자가 입력한 비밀번호처럼, 앞으로 공통으로 사용될 공통 파이썬입니다.)
가상환경 Python은 특정 프로젝트 안에서만 사용하는 독립 Python 환경입니다. 보통 project/.venv/bin/python 같은 형태로 존재하며, 프로젝트마다 필요한 Python 버전과 패키지 버전을 따로 관리할 수 있습니다.
(도어락의 임시 사용자가 사용할 하루, 이틀 정도 유효한 임시 비밀번호처럼, 프로젝트별으로 사용될 독립 파이썬입니다.)
이 중에서, 시스템 Python과 가상환경 Python을 기준으로 설명하겠습니다.
2. Ubuntu의 System Python 이해하기
2.1. Ubuntu에는 Python이 설치되어 있음
Ubuntu에는 일반적으로 Python3 계열이 설치되어 있습니다.
그래서 사용자가 Python을 설치하지 않아도 다음 Python 명령을 사용할 수 있습니다.
python3 --version
2.2. Python 이 설치되어 있는 이유
Ubuntu 운영체제에서 Python은 단순히 개발자가 코딩할 때만 사용하는 언어가 아닙니다.
Ubuntu 운영체제의 일부 시스템 도구, 관리 스크립트, 패키지 관련 기능 등은 Python 을 사용기도 합니다.
| 구분 | 설명 |
| 시스템 관리 도구 | 운영체제 내부 기능이나 관리 스크립트 실행 |
| 패키지 관리 관련 기능 | 프로그램 설치, 설정, 관리 과정 일부 |
| 자동화 스크립트 | 반복 작업 처리 |
| 개발 도구 | Python 기반 명령어 또는 유틸리티 실행 |
따라서 Ubuntu에 기본 설치된 Python은 단순한 개발 도구가 아니라, 운영체제 환경의 일부라고 이해하는 것이 좋습니다.
이를 System Python이라고 합니다.
3. 첫번째 문제 상황: System Python 수정 금지

운영체제는 내부적으로 특정 Python 버전(System Python)과 경로를 기준으로 동작하는 도구를 가지고 있을 수 있습니다.
# 예시: 절대 따라 하지 마세요
sudo rm /usr/bin/python3
sudo ln -sf /usr/bin/python3.11 /usr/bin/python3
그런데 개발자가 System Python을 삭제하거나 특정 버전의 Python 버전으로 바꾸면, 운영체제 입장에서는 원래 있어야 할 Python 버전의 기능을 찾지 못하거나 예상과 다른 Python으로 실행하게 됩니다.
이는 단순히 내 프로젝트만 오류가 나는 것이 아니라 Ubuntu 운영체제의 일부 기능이나 전체 시스템에도 영향을 줄 수 있습니다.
4. 해결책
따라서, Ubuntu의 기본 설치된 Python은 운영체제가 사용하는 System Python으로 두고,
개발자가 프로젝트에 사용하는 Python은 프로젝트 전용 독립된 Python 환경으로 분리해야 합니다.
- Ubuntu 기본 Python = 운영체제가 사용하는 전용 작업 공간
- 가상환경 = 내가 프로젝트별로 따로 쓰는 개인 작업 공간
이렇게 별도의 Python 환경으로 분리하는 방법이 Python 가상환경(venv) 입니다.
이렇게 환경을 분리하여 개발하는 것이 기본적인 Python 사용법입니다.
🚨 주의
- 시스템 Python과 프로젝트용 Python을 같은 공간에서 섞어 쓰면, 패키지 충돌, 실행 오류, 경로 문제로 이어질 수 있습니다.
- 즉, Ubuntu에서는 [1]시스템 Python과 [2]프로젝트용 Python을 분리하는 습관이 중요합니다.
- 외부 패키지는 가능하면 가상환경(venv) 안에서 설치합니다.