파이썬 패키지 관리를 위한 가상 환경: 파이썬으로 개발을 하고 배포하다 보면 패키지 관리의 필요성이 절실해지게 됩니다. 또한 회사에 들어가서 프로젝트에 참여하게 되면 해당 프로젝트의 가상 환경으로 세팅을 하고 시작을 해야 합니다. 이번 포스팅에서는 “가상 환경 설정이 왜 필요하고 어떻게 해야 하는지”에 대해 작성하였습니다.
파이썬 가상 환경 설정이 필요한 이유
가상 환경 설정이 필요한 이유는 크게 3가지로 설명할 수 있습니다.
1. 격리
가상 환경은 특정 Python 인터프리터 버전과 설치된 패키지 세트를 캡슐화하는 자체 포함 디렉터리를 생성합니다. 이러한 격리는 종속성이 다르거나 동일한 패키지의 다른 버전이 필요할 수 있는 여러 프로젝트 간의 충돌을 방지합니다.
2. 재현성
가상 환경을 사용하면 모든 프로젝트 종속성과 해당 버전을 나열하는 ‘requirements.txt’ 파일을 생성할 수 있습니다. 이 파일을 다른 사람과 공유할 수 있으므로 다른 컴퓨터에서 동일한 환경을 더 쉽게 재현할 수 있습니다. 이는 프로젝트에 참여하는 모든 사람이 동일한 종속성 세트를 사용하도록 보장합니다.
3. 배포 용이성
프로젝트를 배포할 때 종속성을 지정하는 requirements.txt 파일을 제공할 수 있습니다. 다른 사람들은 이 파일을 사용하여 가상 환경을 생성하여 동일한 환경을 설정할 수 있습니다. 이렇게 하면 배포 프로세스가 단순화되고 호환성 문제가 발생할 가능성이 줄어듭니다.
파이썬 가상 환경 설정
가상 환경을 만들려면 내장된 venv 모듈(Python 3.3 이상에서 사용 가능)이나 virtualenv와 같은 도구를 사용할 수 있습니다. 이번 포스트에서는 venv 모듈을 사용하는 것을 기반으로 설명하겠습니다. 개발 환경은 로컬이 될 수도, 리눅스와 같은 서버 환경 일 수도 있습니다. 대부분의 개발은 윈도우나 macOS와 같은 로컬에서 우선 개발을 하나 데이터 분석의 경우 리눅스 환경에서 작업을 할 수 있습니다. 때문에 2가지 환경으로 나누어 설명하도록 하고 추가로 주피터에서 가상 환경을 설정하는 방법도 설명하겠습니다.
로컬에서 가상 환경 설정 (방법1. VS Code 상에서 설정)
작업하고자 하는 디렉토리로 이동하거나 새로 만들어줍니다.
Ctrl+Shift+p
입력으로 명령 팔레트를 엽니다.
‘env
‘를 입력하여 ‘Python: Creat Enviroment…’를 클릭합니다.
‘venv
‘를 클릭합니다.
끝 입니다.
작업하고자 하는 디렉토리에 아래와 같이 .venv 디렉토리가 생긴 것을 확인 할 수 있습니다. 이제 해당 환경에서 설치한 패키지는 해당 프로젝트에서만 적용이 되는 겁니다.
터미널에서 해당 프로젝트에 필요한 패키지들을 설치하면 됩니다.
로컬에서 가상 환경 설정 (방법2. 터미널 상에서 설정)
가상 환경 설정을 위해서는 우선 터미널에 접속합니다. 터미널에 액세스하기 위해서 윈도우에서는 실행창에서 cmd를 입력합니다. macOS에서는 ‘cmd+space’를 눌러 Spotlight를 열고 터미널을 입력합니다.
1. 가상 환경 생성
# 프로젝트 디렉토리로 이동합니다
cd your_project_directory
# 가상환경을 생성합니다
# 두 번째 인자에는 원하는 가상환경 이름을 적습니다
python -m venv venv_name
2. 가상 환경 활성화
# 가상환경을 활성화합니다 (on Windows)
venv_name\Scripts\activate
# 가상환경을 활성화합니다 (on Unix or MacOS)
source venv_name/bin/activate
가상 환경을 활성화한 후 pip를 사용하여 프로젝트별 종속성을 설치할 수 있으며, 이는 가상 환경 내에서 격리됩니다. 가상 환경을 비활성화하려면 ‘deactivate’ 명령을 사용하면 됩니다.
VS code 사용자라면 명령창에서 ‘code’를 입력하면 VS code를 실행할 수 있습니다.
code
VS code가 실행되었다면 Ctrl+Shift+p를 눌러 팔레트를 실행하고 ‘select interpreter’를 입력합니다. ‘Python:Select Interpreter’를 선택하면 사용 할 수 있는 interpreter 목록들이 나옵니다. 여기에 우리가 설정한 가상환경을 선택할 수 있습니다.
저는 가상 환경 설정 코드에서 venv_name을 ‘python_basic’으로 입력했기 때문에, ‘python_basic’이라는 가상 환경이 설정된 것을 볼 수 있습니다.
이제 프로젝트 별로 종속성 있게 패키지를 관리하고 이용할 수 있습니다.
만일 가상 환경 변경 후, VS code에서 스크립트 실행 에러가 발행한다면 해당 포스트를 확인해주세요.
리눅스(우분투)에서 가상 환경 설정
1. python3-venv 패키지를 설치
관리자 권한이 필요합니다.
sudo apt-get install python3-venv
2. 가상 환경을 생성
virtual_environment_name을 원하는 가상 환경 이름으로 변경하여 입력합니다.
python3 -m venv virtual_environment_name
3. 가상 환경을 활성화
source virtual_environment_name/bin/activate
활성화가 완료되었다면 아래와 같이 프롬프트 맨 앞에 가상 환경 이름이 괄호 안에 나타납니다. 저는 가상환경 이름을 ‘test_env’로 했기에 ‘(test_env)’가 프롬프트 앞에 보이네요
해당 가상 환경에서 원하는 패키지를 설정하고 python을 실행하면 해당 환경에서 파이썬 코드가 실행되게 됩니다. ‘deactivate‘ 명령으로 해당 가상 환경에서 빠져 나올 수 있습니다.
파이썬 가상 환경 배포
Python 프로젝트를 배포할 때 ‘requirements.txt’파일을 통해서 프로젝트에서 사용한 가상 환경을 배포할 수 있습니다. 이 파일을 사용하면 다른 컴퓨터에서 또는 서버에 배포할 때 동일한 환경을 쉽게 재현할 수 있습니다. 다음은 venv를 사용하여 requirements.txt 파일을 만들고 사용하는 단계입니다. (설명은 윈도우 기준으로 했지만 리눅스에서도 유사합니다.)
1. 가상 환경 activate
가상환경을 생성한 디렉토리로 이동하여 activate를 입력합니다
# 가상 환경 디렉토리로 접근
cd your_project_directory\venv_name\Scripts
# 가상 환경 activate
activate
2. 패키지 설치
가상 환경이 활성화된 동안 프로젝트에 필요한 패키지를 설치합니다. 예를 들어 pandas와 matplotlib가 필요한 프로젝트라고 한다면 아래와 같이 패키지를 설치합니다.
pip install pandas matplotlib
pip list를 입력하면 현재 가상 환경에 설치된 패키지들을 확인 할 수 있습니다.
pip list
Package Version
--------------- ------------
contourpy 1.2.0
cycler 0.12.1
fonttools 4.47.0
kiwisolver 1.4.5
matplotlib 3.8.2
numpy 1.26.2
packaging 23.2
pandas 2.1.4
Pillow 10.1.0
pip 23.2.1
pyparsing 3.1.1
python-dateutil 2.8.2
pytz 2023.3.post1
six 1.16.0
tzdata 2023.4
3. ‘requirements.txt’ 생성
패키지와 해당 버전을 캡처하는 requirements.txt 파일을 생성합니다. 활성화된 가상 환경에서 다음을 실행합니다. 이 명령은 설치된 패키지의 이름과 버전을 requirements.txt 파일에 씁니다.
pip freeze > requirements.txt
4. 프로젝트 배포
다른 머신이나 서버에 프로젝트를 배포하는 경우 다음 단계를 따릅니다.
위와 동일하게 대상 머신에서 프로젝트 디렉토리로 이동하여 python -m venv venv_name를 사용하여 가상 환경을 만들고 활성화 합니다.
requirements.txt 파일을 프로젝트의 가상환경이 저장된 디렉토리로 옮깁니다. 저는 python_test라는 프로젝트에서 python_dist_test라는 가상환경을 만들었습니다. 때문에 ~/python_test/python_dist_test/Scripts 디렉토리에 requirements.txt 파일을 옮겼습니다. 해당과정은 터미널에서도 가능하나 힘드신 분은 아래와 같이 윈도우 탐색기에서 진행하셔도 괜찮습니다.
이제 활성화된 가상환경에서 requirements.txt 파일을 이용하여 프로젝트 패키지들을 설치하면 됩니다.
pip install -r requirements.txt
이렇게 하면 대상 환경에 개발 환경과 동일한 패키지 버전이 있는 것을 확인할 수 있습니다
pip list
Package Version
--------------- ------------
contourpy 1.2.0
cycler 0.12.1
fonttools 4.47.0
kiwisolver 1.4.5
matplotlib 3.8.2
numpy 1.26.2
packaging 23.2
pandas 2.1.4
Pillow 10.1.0
pip 23.2.1
pyparsing 3.1.1
python-dateutil 2.8.2
pytz 2023.3.post1
six 1.16.0
tzdata 2023.4
이와 같은 가상 환경 배포 방법을 활용하여 Git과 같은 버전 관리에 requirements.txt를 포함하면 다른 사람이 쉽게 개발 환경을 구현할 수도 있습니다~!