python은 생태계가 잘 구축된 언어이다. 즉, 유용한 라이브러리와 패키지들이 아주 많다. 이미지를 처리하고 싶으면 pillow를 쓰면 된다. 마크다운을 다뤄야 한다면 markdownx가 있다. 웹 페이지를 만든다면 Django도 있고, Flask도 있다. 골라 쓰면 된다. 크롤링을 한다면 BeautifulSoup과 Selenium을 취향것 섞어서 어지간한 건 다 할 수 있다.
python의 가상환경은 이러 다양한 라이브러리들을 하나의 조합으로 묶어준다. 예를 들어 Flask로 웹페이지를 개발하고 있다고 하자. 가상환경을 생성하여 Flask와 pillow, markdownx 등의 필요한 라이브러를 해당 가상환경에 설치할 수 있다. 그리고 개발은 그 안에서만 하면 된다. 이렇게 하면 다른 python 프로젝트에는 이 라이브러리들이 영향을 미치지 않는다.
python 가상환경을 사용하면 프로젝트별 라이브러리 관리가 아주 용이해 진다.
동시에 여러가지의 프로젝트를 진행해야 하는 경우가 있다. 가령 Django로 작성중인 웹페이지 프로젝트와 Flask로 작성중인 웹페이지 프로젝트가 동시에 내 컴퓨터에 있을 수 있다.
Django 프로젝트에 필요한 라이브러리와 Flask 프로젝트에 필요한 라이브러리는 다를 것이다. 이 경우에 가상환경으로 각각 필요한 라이브러리를 나누지 않고 전역으로 라이브러리를 설치하여 개발하다보면 어디에 뭐가 필요했는지 헷갈리기 시작한다. 이 헷갈리는 상태에서 서버에 프로젝트를 올리면 십중팔구 개고생하기 십상이다.
이런 사단을 미연에 방지하기 위해서 python을 이용한 개발은 python이 제공해주는 훌륭한 가상환경이라는 기능을 활용하도록 하자.
Djnago 프로젝트와 Flask 프로젝트 각각 가상환경을 생성하고, 그 안에서만 개발하면 관리하기가 아주 용이하다.
python을 설치하면 기본적으로 venv를 사용할 수 있다. 아래의 명령어로 간단하게 가상환경을 생성할 수 있다.
D:\venvs>python -m venv django_project
이렇게 하면 D 드라이브의 venvs 라는 경로 밑에 django_projects 라는 폴더가 생성된다.
D:\venvs\django_project 디렉터리
2020-12-06 오후 10:40 <DIR> .
2020-12-06 오후 10:40 <DIR> ..
2020-12-06 오후 10:40 <DIR> Include
2020-12-06 오후 10:40 <DIR> Lib
2020-12-06 오후 10:40 88 pyvenv.cfg
2020-12-06 오후 10:40 <DIR> Scripts
1개 파일 88 바이트
5개 디렉터리 814,355,423,232 바이트 남음
D:\venvs\django_project>
D:\venvs\django_project>cd Scripts
D:\venvs\django_project\Scripts>activate
이렇게 입력하면 프롬프트가 갱신되면서 아래와 같이 django_project 가상환경에 진입하게 된다.
(django_project) D:\venvs\django_project\Scripts>
왼쪽의 (django_project) 로 현재 가상환경을 확인할 수 있다.
(django_project) D:\venvs\django_project\Scripts>cd \python_projects
(django_project) D:\python_projects>
(django_project) D:\python_projects>pip install django
Collecting django
(... 생략 ...)
Successfully installed asgiref-3.3.1 django-3.1.4 pytz-2020.4 sqlparse-0.4.1
(django_project) D:\python_projects>pip list
Package Version
---------- -------
asgiref 3.3.1
Django 3.1.4
pip 19.2.3
pytz 2020.4
setuptools 41.2.0
sqlparse 0.4.1
(django_project) D:\python_projects>django-admin startproject django_project
(django_project) D:\python_projects>dir
D 드라이브의 볼륨: DATA
볼륨 일련 번호: 22AF-B8BC
D:\python_projects 디렉터리
2020-12-06 오후 10:55 <DIR> .
2020-12-06 오후 10:55 <DIR> ..
2020-12-06 오후 10:55 <DIR> django_project
0개 파일 0 바이트
3개 디렉터리 814,308,507,648 바이트 남음
(django_project) D:\python_projects>
가상환경을 비활성화 하려면 아무 경로에서나 deactivate
를 입력하면 된다.
(django_project) D:\python_projects>deactivate
D:\python_projects>
가상환경을 빠져나와서 (전역환경에서) pip list
로 확인해 보면 가상환경에 설치된 라이브러리 목록과 다른 라이브러리들이 설치되어 있음을 확인할 수 있다.
(django_project) D:\python_projects>deactivate
D:\python_projects>pip list
Package Version
---------------------------------- -------------------
alabaster 0.7.12
anaconda-client 1.7.2
anaconda-navigator 1.9.12
(... 생략 ...)
django_project 가상환경에 접속한 상태에서 위에서 생성한 django_project의 파일을 실행하면 가상환경에 설치된 라이브러리들 기준으로 파일을 실행한다.
반면 전역 공간에서 django_project의 파일을 실행하면 전역공간에 설치된 라이브러리들이 적용된 상태로 파일을 실행하게 된다.
conda를 설치하면 파이썬과 함께 주요 라이블러리들이 함께 설치된다. 온갖 꿀 라이브러리들을 함께 설치해주는 anaconda와 그보다 가볍게 사용할 수 있는 miniconda가 있다. 둘 다 가상환경 구성방법은 동일한다.
여기서는 conda로 가상환경 생성하고 기동하는 부분과 pip를 설치하는 부분(minconda로 가상환경을 생성한 경우 pip가 자동으로 설치되지 않는다.)까지만 살펴본다. 나머지 부분은 위의 내용을 참조하면 된다.
D:\>conda create -n flask_projects python=3.8
Collecting package metadata (current_repodata.json): done
Solving environment: done
(... 생략 ...)
Proceed ([y]/n)?
conda로 가상환경을 생성하는 경우엔 설정하고자하는 파이썬 버전을 명시해 주어야 한다. python만 설치하는 경우엔 애초에 하나의 파이썬 버전만 설치되지만, conda로 가상환경을 설치하는 경우엔 가상환경에 파이썬 자체를 설치한다. 따라서 어떤 파이썬을 설치할지 명시해 주어야 한다.
아래의 명령어로 conda로 생성한 가상환경을 활성화 시킬 수 있다.
D:\>conda activate flask_project
(flask_project) D:\>
만약 miniconda로 가상환경을 생성했다면 가상환경에 pip가 자동으로 설치되지 않는다. 이 경우 conda 명령어로 pip를 설치해야 한다.
D:\>conda install pip
설치가 완료되면 pip 사용이 가능하다.
conda 가상환경의 비활성화는 conda deactivate
명령어로 가능하다.
(flask_project) D:\>conda deactivate
D:\>