본격적으로 Django 튜토리얼에 들어가기에 앞서, 이 글에서는 pyenv와 virtualenv를 활용하여 Django 프로젝트를 시작할 환경을 세팅하는 방법에 대해 다루도록 하겠습니다.
어떤 프로젝트를 새로 시작할 때, 처음 개발 환경을 세팅할 때는 다소 주의를 기울여야 합니다. 혹여 다른 PC에서 또 다시 개발환경을 세팅해야 될 때에 대비해서 이 과정만큼은 꼼꼼히 메모해 가며 진행하는 것이 좋습니다.
급하다고 무작정 코딩부터 시작하다가는, 나중에 개발 환경이 꼬여서 프로젝트를 처음부터 다시 생성해야 하는 불상사가 생길 수도 있기 때문이죠.
Sandbox 생성하기
pyenv는 한 시스템에 여러 버전의 파이썬을 설치해 놓고 필요에 따라 번갈아가며 쓰기 위해 사용하고, virtualenv는 각 프로젝트에서 전용으로 사용할 패키지들을 설치할 Sandbox를 생성해주는 유틸리티입니다.
시스템 전역적으로는 아무런 영향을 주지 않고 Django개발을 진행하기 위해 pyenv로 3.4.3 버전의 파이썬을 설치하고, virtualenv에서 pyenv가 제공하는 파이썬 바이너리와 연동해서 샌드박스를 구축해 사용하도록 하겠습니다.
pyenv와 virtualenv를 설치하고 사용하는 기본적인 방법은 다음 글에 설명해 놓았습니다.ㅎㅎ
이런 귀찮은 샌드박스 세팅 과정을 그냥 건너뛰고 싶으신 경우, 시스템에 설치된 파이썬 버전을 한 번 확인해 보세요. 현재 릴리즈된 Django 1.8은 파이썬 2.7, 3.2, 3.3, 3.4버전을 모두 지원하므로 해당 버전의 파이썬이 이미 시스템 전역으로 설치되어 있는 경우 샌드박스를 사용하지 않아도 무방합니다.
단, 시스템에 설치된 파이썬 버전이 여기에 속하지 않는 경우 예상치 못한 문제가 생길 수 있으므로 함부로 버전을 바꾸려 하지 말고, 샌드박스를 생성해서 작업하는 편이 좋습니다.
프로젝트 디렉토리 생성
이 디렉토리는 프로젝트의 루트 디렉토리가 됩니다. 즉, GIT등을 통해 버전관리를 하려는 경우 이 디렉토리에서 Initialize를 해 주면 됩니다.
VirtualEnv 디렉토리를 프로젝트 디렉토리 내에 위치시키기 위해 루트 디렉토리를 수동으로 생성하고 추후에 디렉토리를 재구성하는 방법을 사용하도록 하겠습니다.
생성하는 디렉토리의 명칭은 임의의 명칭을 사용해도 무방합니다.
(여기서는 'myproject'를 사용하도록 하겠습니다.)
mkdir myproject cd myproject
샌드박스 생성
먼저 pyenv 명령으로 전역으로 사용하는 파이썬 버전을 3.4.3으로 바꿔줍니다.
pyenv global 3.4.3
여기서 뭔가 (설치가 안 되 있다.. 등등) 오류가 났다 싶으면 [pyenv 설치 및 세팅 방법]을 다시 참고해서 3.4.3버전을 설치하고 계속 진행하도록 합니다.
이제 virtualenv로 샌드박스 디렉토리를 생성하고 활성화해 줍니다. 'venv'는 샌드박스의 이름이며, 역시 임의의 이름을 사용해도 무방합니다.
virtualenv venv --python=$(which python) source venv/bin/activate
이렇게 하면 Shell맨 앞에 '(venv)'가 붙어 나올 것입니다. 이는 현재 샌드박스환경 내에 있다는 의미입니다. 지금부터는 글에서 명령을 기술할 때 샌드박스 내부라는 것을 나타내기 위해 '(venv)$'로 표시하도록 하겠습니다.
이제부터 진행하는 과정은 이 표시가 있는 상태에서 진행해야지, 그렇지 않으면 뭐가 없다는 둥.. 오류가 마구마구 발생할 것입니다. 그럴 때는 당황하지 말고, 'source venv/bin/activate' 명령을 실행해주면 됩니다.
Django및 의존성 패키지 설치
Django패키지 설치
Django도 하나의 파이썬 패키지이므로 pip를 통해 간단히 설치할 수 있습니다.
(venv)$ pip install django
(Optional) PyMySQL패키지 설치
MySQL DB를 사용하려는 경우, PyMySQL패키지를 설치하도록 합니다.
현재 Django1.8에 기본으로 포함되어있는 MySQLDB패키지가 호환성 문제로 인해 제대로 동작하지 않으므로, MySQL과 연동을 위해서는 이 패키지를 설치해줘야 합니다.
(venv)$ pip install pymysql
(Optional) JSONField패키지 설치
ORM 추상화계층에서 JSON형식의 Field를 사용하려면 JSONField패키지를 설치해줍니다. 이 패키지를 설치하면 JSON(파이썬의 dict)형식의 자료형과 DB를 보다 손쉽게 연동할 수 있습니다.
(venv)$ pip install jsonfield
(Optional) manage.py 자동완성 스크립트 설치
manage.py는 Django프로젝트를 생성할 때 자동으로 생성되며, 사이트를 관리하기 위한 백엔드 콘솔의 관문 역할을 하는 스크립트입니다.
바로 이어지는 다음 글부터 manage.py를 통해 여러 작업들을 수행할텐데, 그 때 자동완성 기능을 통해 타이핑 한 글자라도 더 줄이기 위해서는 다음 스크립트를 ~/.bashrc에 등록해두면 됩니다. (혹은, 별도 파일로 만들어서 source명령으로 불러옵니다.)
_django_completion() { COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \ COMP_CWORD=$COMP_CWORD \ DJANGO_AUTO_COMPLETE=1 $1 ) ) } complete -F _django_completion -o default django-admin.py manage.py django-admin _python_django_completion() { if [[ ${COMP_CWORD} -ge 2 ]]; then local PYTHON_EXE=${COMP_WORDS[0]##*/} echo $PYTHON_EXE | egrep "python([2-9]\.[0-9])?" >/dev/null 2>&1 if [[ $? == 0 ]]; then local PYTHON_SCRIPT=${COMP_WORDS[1]##*/} echo $PYTHON_SCRIPT | egrep "manage\.py|django-admin(\.py)?" >/dev/null 2>&1 if [[ $? == 0 ]]; then COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]:1}" \ COMP_CWORD=$(( COMP_CWORD-1 )) \ DJANGO_AUTO_COMPLETE=1 ${COMP_WORDS[*]} ) ) fi fi fi } # Support for multiple interpreters. unset pythons if command -v whereis &>/dev/null; then python_interpreters=$(whereis python | cut -d " " -f 2-) for python in $python_interpreters; do [[ $python != *-config ]] && pythons="${pythons} ${python##*/}" done unset python_interpreters pythons=$(echo $pythons | tr " " "\n" | sort -u | tr "\n" " ") else pythons=python fi complete -F _python_django_completion -o default $pythons unset pythons
[참고] http://clouddenizen.com/2012/02/02/setup-django-bash-completion-in-ubuntu/
이렇게 하면 manage.py및 django-admin을 사용할 때 [Tab]키를 통해 자동완성 및 추천어 기능을 사용할 수 있습니다. (한 가지 흠이 있다면, 자동완성 속도가 조금 느리긴 합니다. - 그래도 직접 치는것보다는 빠르겠죠?^^)
다음 글에서는 Django프로젝트와 App을 생성하고, 전역 운용환경을 설정하는 방법에 대해 다루도록 하겠습니다.
- [Django Tutorial] 9. Production - uWSGI를 통해 Nginx 웹 서버와 연동하기 (11289) *1
- [Django Tutorial] 8. Production - setting.py설정, Static파일 모으기 (5432)
- [Django Tutorial] 7. 백엔드 콘솔에 Custom Command 추가하기 (4123)
- [Django Tutorial] 6. Database 연동하기 - Model설계, Migration (30085)
- [Django Tutorial] 5. Static 파일 사용하고 관리하기 (9216)
- [Django Tutorial] 4. URL Config, Template 및 View의 동작에 대한 이해 (9141)
- [Django Tutorial] 3. 프로젝트 및 App 생성, settings.py수정(DB연동, Migration), Runserver (12249)
- [Django Tutorial] 1. 파이썬 기반 웹 프레임워크 Django에 대한 소개 (10899) *2
- VirtualEnv를 통한 Python Sandbox 개발환경 구축하기 (4355)
- pyenv를 이용하여 여러 버전의 Python 동시에 사용하기 (14667) *3