Django를 쓰다보면 여러 종류의 project를 동시에 진행하는 경우가 있을 수도 있다. 특히 여러개의 웹사이트를 만드는 경우나, 테스트를 다른 Django 환경에서 진행해보고 싶을 경우이다. 따라서 가장 흔하게 하는 잘못된 예시 중 하나는 django-admin startproject [] 을 그냥 컴퓨터에 자동적으로 여러개의 project를 시작하는 것이다.
이렇게 해도 보통 큰 문제는 없다. 하지만 언제 문제가 생기냐면 이 여러개의 project를 진행하다가 한 project에서는 지원하지 않는 기능을 가지고 있거나 원치 않는 상황이 발생할 수도 있다는 것이다.
따라서 이런 경우에는 virtualenv를 사용하여 Django를 따로 설치해주고 실행하면 project 간에 충돌이 이루어지지 않을 것이다.
우리나라의 대부분의 초보 개발자들이라면 OS가 Windows인 컴퓨터를 가지고 있을 것이다. 나도 그러하다. 그렇다면 Windows에서 어떻게 virtualenv를 통해 Django를 설치할 수 있을지 알아보자.
※ 만약 컴퓨터 자체에 Django를 설치해놨다면, pip uninstall django 를 통해 Django를 삭제해주고 시작해주어야 한다.
※ virtualenv 설치하기:
우선 다음의 코드를 cmd 나 powershell에 입력한다:
PS C:\Users\your user name> pip install virtualenv
사실 이러면 virtualenv 설치는 끝이다. 이제 그렇다면 virtualenv를 적용시켜보자
※ virtualenv 적용하기:
다음의 project1이라는 파일을 만들고, 파일로 이동한 후, 다음의 코드를 cmd 나 powershell에 입력한다:
PS C:\Users\your user name> mkdir project1
PS C:\Users\your user name> cd project1
PS C:\Users\your user name\project1> virtualenv env
이제 venv1이라는 파일 안에 env 라는 파일이 하나 더 생겼을 것이다. 이제 다음과 같은 명령을 입력한다:
PS C:\Users\your user name\project1> env\Scripts\activate
...
(env) PS C:\Users\your user name\project1>
괄호의 (env)는 virtual environment에 들어왔음을 의미한다. 한번 여기에 설치된 package들을 확인해보자:
(env) PS C:\Users\your user name\project1> pip list
Package Version
---------- -------
pip 20.2.4
setuptools 50.3.2
wheel 0.35.1
(env) PS C:\Users\your user name\project1>
단순히 pip과 처음에 virtual environment가 설치되면서 같이 설치된 wheel 빼고는 따로 없는 것이 보인다. 그렇다면 원래 컴퓨터로 돌아가서 거기에 설치된 package들을 한번 확인해보자 (deactivate를 통해 가상환경을 빠져나올 수 있다):
(env) PS C:\Users\your user name\project1> deactivate
PS C:\Users\your user name\project1> pip list
Package Version
------------------------ ---------
appdirs 1.4.4
asgiref 3.2.10
cachetools 4.1.1
certifi 2020.6.20
chardet 3.0.4
distlib 0.3.1
filelock 3.0.12
google-api-core 1.23.0
google-api-python-client 1.12.5
google-auth 1.23.0
google-auth-httplib2 0.0.4
google-auth-oauthlib 0.4.2
googleapis-common-protos 1.52.0
httplib2 0.18.1
idna 2.10
oauthlib 3.1.0
Pillow 8.0.1
pip 20.2.4
protobuf 3.13.0
pyasn1 0.4.8
...
PS C:\Users\your user name\desktop\project1>
virtual environment에 있던 package들 보다 더 많은 package들이 설치된 것을 볼 수 있다. (더 많지만 생략했다. 그리고 컴퓨터 자체의 Django도 삭제했으므로, Django도 안 보이는 것을 알 수 있다.)
그렇다면 이제 다시 virtual environment에서 Django를 한번 설치해보자:
(env) PS C:\Users\your user name\project1> pip install django
Collecting django
Using cached Django-3.1.3-py3-none-any.whl (7.8 MB)
Collecting asgiref<4,>=3.2.10
Using cached asgiref-3.3.0-py3-none-any.whl (19 kB)
Collecting pytz
Using cached pytz-2020.4-py2.py3-none-any.whl (509 kB)
Collecting sqlparse>=0.2.2
Using cached sqlparse-0.4.1-py3-none-any.whl (42 kB)
Installing collected packages: asgiref, pytz, sqlparse, django
Successfully installed asgiref-3.3.0 django-3.1.3 pytz-2020.4 sqlparse-0.4.1
(env) PS C:\Users\your user name\project1>
설치가 완료됐음을 알 수 있다. 여기서 만약 우리가 pip list를 통해 가상환경에 설치된 package들을 본다면:
(env) PS C:\Users\your user name\project1> pip list
Package Version
---------- -------
asgiref 3.3.0
Django 3.1.3
pip 20.2.4
pytz 2020.4
setuptools 50.3.2
sqlparse 0.4.1
wheel 0.35.1
(env) PS C:\Users\your user name\project1>
Django가 설치된 것을 볼 수 있다.
그렇다면 아예 새로운 project에 적용시킬 새로운 가상환경을 한번 만들어보자. 이번에는 project2라는 폴더를 생성시키고, 그 안에 가상환경을 만들어보자:
(env) PS C:\Users\your user name\project1> deactivate
PS C:\Users\your user nameproject1> cd ..
PS C:\Users\your user name> mkdir project2
PS C:\Users\your user name> cd project2
PS C:\Users\your user name\project2> virtualenv env
created virtual environment CPython3.9.0.final.0-64 in 1253ms
creator CPython3Windows(dest=C:\Users\your user name\project2\env, clear=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\your user name\AppData\Local\pypa\virtualenv)
added seed packages: pip==20.2.4, setuptools==50.3.2, wheel==0.35.1
activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
PS C:\Users\your user name\project2>
이후 가상환경 안에 들어가서 설치된 package들을 보면:
PS C:\Users\your user name\project2> env\Scripts\activate
(env) PS C:\Users\your user name\project2> pip list
Package Version
---------- -------
pip 20.2.4
setuptools 50.3.2
wheel 0.35.1
(env) PS C:\Users\your user name\project2>
처음에 project1을 만들고 가상환경을 설치했을때와 비슷하다는 것을 알 수 있다. 따라서 우리가 이 환경에서 Django project를 사용하고 싶다면, 새롭게 pip install django를 해주어야 할 것이다.
※ virtual environment 정리
매우 허접한 그림이지만, 설명하기에는 적절한 그림이다. venv1이라는 폴더 안에서 env를 통한 가상환경을 작동시킬 경우, 왼쪽 박스에 보이는 것처럼 컴퓨터는 그 환경에서만 작동을 한다. 거기에 설치하는 package는 그 가상환경 안에서만의 package로 작동할 것이고, venv2라는 폴더 안에서 env를 통한 가상환경을 작동시킬 경우, 오른쪽 박스의 가상환경 안에서만 package들이 작동할 것이다.
※ 2020/11/17 추가:
가끔씩 'pip install pillow' 같이 실행을 해도, 'Fatal error in launcher unable to create process using...' 같은 에러 메세지를 볼 수도 있다. 이는 단순히 경로 문제 때문에 생기는 것이므로, 다음과 같이 입력하면 된다:
'python -m pip install pillow'
'Django 공부하기' 카테고리의 다른 글
<Django 공부하기> 회원탈퇴 구현하기 (1) - 단순 회원탈퇴 (No Password Needed) (0) | 2020.11.12 |
---|---|
<Django 공부하기> Forgot ID? 구현하기 (0) | 2020.11.10 |
<Django 공부하기> forms.py란 무엇인가?? Form이란 무엇인가? (0) | 2020.11.09 |
<Django 공부하기> null=True와 blank=True의 차이점은?? (0) | 2020.11.07 |
<Django 공부하기> redirect와 render의 차이점 (0) | 2020.11.06 |