MiniConda Django 프로젝트 설정하기

시작

필자는 지인들과 개발 지식 습득 목적 (+ 추가적인 광고 부수입 목적?) 웹 기반 토이 프로젝트를 진행 중입니다. 팀원들은 개발 지식 습득이 목적이면서 빠른 속도로 프로젝트를 마무리하고 싶었습니다. 그 결과 선택한 웹 프레임 워크는 python 기반의 Django 입니다. 언어가 python 인 것에 대한 이유가 가장 컸습니다. 배우면 나중에 어딘가는 쓸 것 같은데 ???!

개별적으로 Django 에 대한 간략한 공부를 마치고 필자는 github에 프로젝트를 올려 같은 환경에서 Django가 동작하길 원했습니다. 팀원들과 Django 프로젝트를 시작하시는 분들에게 python이 아직 익숙하지 않지만 프로젝트를 생성해야하는 분들에게 조금이라도 도움이 되었으면 하는 마음에 제 경험을 공유하고자 합니다.

Python package Manager

1. Pip

제일 처음으로 python 공식적인 패키지 관리자 pip만을 사용해 프로젝트 관리를 하려고 했습니다. pip로만 프로젝트 관리하기에는 다음과 같은 문제들이 발생합니다. 모듈이 전역으로 설치되며 모듈에 의존성이 보장되지 않습니다. 또한, 개발 환경을 설정할 시 오차 없이 개발 환경이 같아야합니다. 이런 문제들을 해결하려고 검색한 결과 가상 환경에 대해 알게 되었습니다.

2. Pip + Virtualenv

개인적으로 진행했던 python 프로젝트 외에는 다른 팀원 같이 작업을 해본적이 없습니다. 개인 프로젝트만 하다 보니 공부 당시 가상 환경에 대해서는 알 필요가 없어서 넘어간 기억이 있습니다. 가상 환경 설정이 필요한 시점이 왔습니다.

가상 환경에 개념은 단순합니다. 각자 다른 환경(다른 프로젝트)에서 해당 설정에 맞는 python 설정을 하자.

가상 환경에서는 다른 python 버전으로 프로젝트를 관리할 수 있다.

하지만 pip + 가상환경 으로 프로젝트 관리하는 것도 문제가 발생할 수 있습니다. pip는 개별 환경에 설치된 python 패키지에 대한 강한 의존성을 지니기 때문에 문제가 발생할 여지가 있으며 이는 배포 과정에서 문제가 생길 수 있다고 판단하고 좀 더 찾아봤습니다.

3. MiniConda

가상환경 + pip 를 제외한 패키지 관리자가 없을리가 없습니다. python 라이브러리 방대함을 알고 있기에 여러 가지 패키지 관리자를 찾아본 결과 두 가지 항목으로 압축되었습니다. Poetry, Conda 로 압축되었습니다. Poetry 와 Conda 모두 개발 환경 정합성을 보장하는 패키지 관리자였습니다. 둘 중 어떤 패키지 관리자를 사용해야할지 고민하던 중 한 블로그 포스트를 보고 다음 이유에서 Conda를 사용하기로 결정하였습니다.

  • MiniConda 라는 부트스트랩 Conda 제공
  • 보다 사용자가 많아 다양한 커뮤니티에서 정보 획득가능

Install

본격적으로 miniconda를 사용해 Django를 설치해보도록 하겠습니다. 다음과 같은 과정으로 진행하려고 합니다.

  1. miniconda 설치
  2. conda 가상 환경 설정
  3. Django 설치
  4. django 프로젝트 공유하기

1. miniconda 설치하기

우선 Miniconda 에서 OS 설정에 맞는 설치를 합니다. 필자는 Mac OS 환경에서 설치하였습니다. Window 환경이신분 들은 .exe 파일을 통해 설치하도록 합니다.

설치가 완료된 뒤에 터미널 또는 CMD 를 열어 보면 다음과 같은 화면이 보인다면 정상적으로 성치된 것입니다. (base) 가 보이지 않는 분들은 커맨드 종료 후 다시 진행하시는 것을 권장해드립니다. (실제로 같이 프로젝트하는 팀원 중 하나가 커맨드 창을 초기화하지 않고 설치 안된다고 붙잡고 있었습니다…)

터미널에 다음과 같은 화면을 볼 수 있다.

2. conda 가상 환경 설정

다음 단계는 가상 환경을 만들어 볼 차례 입니다. 아래 명령어를 실행해 줍니다.

# 현재 가상 환경 확인 하기 => 처음에는 (base) 환경만 확인할 수 있다.
conda env list

# python v3.8 conda 가상 환경(wtf) 만들기
conda create --name wtf python=3.8

# python을 실행해보면 3.8 버전으로 설치된 것을 확인할 수 있다.
python
wtf 이라는 가상 환경 생성 완료!!

가상 환경은 설치 되었지만 wtf 가상 환경을 활성화해야합니다. 계속 진행합니다. 기존 터미널 환경에 보이던 (base) 이 (wtf)으로 보인다면 가상 환경이 성공적으로 활성화되었습니다.

# 가상 환경(wtf) 활성화
conda activate wtf
커맨드 창에 (wtf)이 보인다면 가상환경 설정 완료!

3. Django 설치

지금까지 잘 따라오신 분들은 가상환경에서 Django를 설치 후 프로젝트까지 생성해 보도록 하겠습니다. miniconda 를 통해 설치한 뒤 프로젝트 폴더로 이동해 django 프로젝트를 생성합니다.

# django 의존성 설치 
# 필자는 python v3.8과 호환되는 3.0.4 버전을 설치
conda install django=3.0.4

# 각자 원하는 프로젝트 디렉토리 위치에서 
# django 프로젝트 생성
cd <project directory>
django-admin startproject <project Name>

4. django 프로젝트 공유하기

프로젝트 공유까지 거의 다 왔습니다. 이제 남은 과정은 지금까지 설치한 환경을 다른 팀원에게 공유하면됩니다. 지금까지 설치된 환경을 environment.yml 라는 파일에 작성하고 그 파일의 설정으로 팀원들은 의존성 설치를 할 것입니다. 다음 명령어를 실행해 봅시다.

# 현재 가상환경설정 environment.yml 에 export
# !! --no-builds --from-history 옵션을 꼭 주어야 합니다
# 옵션을 주지 않는 경우 현재 OS 환경에 의존성이 생겨 다른 팀원들은 패키지 설치가 되지 않는 경우가 발생할 수 있습니다.
conda env export --no-builds --from-history > environment.yml
environment.yml

위와 같은 형태의 파일이 기록됩니다. 파일 내용은 약간 다를 수 있습니다. 필자는 conda-forge 라는 채널(보다 안정적이라고 함)을 추가하여 의존성을 가져옵니다. 또한 django-environ 이라는 환경 변수 관리용 패키지를 추가로 설치하였습니다.

environment.yml 파일이 포함된 django 프로젝트를 github 등을 통해 팀원들에게 공유합니다. 팀원들 환경에서는 두 가지만 하면됩니다. 우선 가상 환경 사용을 위한 miniconda 설치 후 environment.yml 가 있는 디렉토리에서 다음 명령어를 실행합니다.

# environment.yml 파일을 읽어 패키지 동일화 하기
conda env update -f ./environment.yml

# 명령어 실행이 끝난 뒤 생성된 가상 환경 이름으로 활성화
conda activate wtf

마무리

miniconda를 사용해 django 프로젝트를 팀원들과 공유할 수 있는 환경이 되었습니다.. 필자도 패키지를 많이 설치해보지 않은 상황입니다. 패키지가 늘어날수록 의존성 문제가 발생할 수도 있지만 팀 프로젝트하면서 환경 설정으로 많은 시간 단축이 되었으면 하는 바람으로 글을 작성해보았습니다. 감사합니다.

답글 남기기

이메일 주소는 공개되지 않습니다.