[Python] 파이썬 실행환경의 독립 virtualenv & PyCharm

그동안 python 개발을 하면서 deployment 에는 그렇게 많이 신경을 쓰지 않았었습니다.

하지만 결국은 virtualenv 의 필요성을 아주 절감하고는 이렇게 정리를 해 봅니다.
 
예를 들어 개발 소스 (패키지)는
 
A
|
+-- B
|
+-- C
 
아래와 같은 식으로 되어 있다고 가정하고,
 
A.B 패키지를 돌리는 파이썬 패키지 등의 개발 환경과 
A.C의 개발 환경이 다를 때, 필요에 따라 개별적으로 
쉘 스크립트를 작성하여 필요 패키지를 apt-get install python-xxx 와 같이 설치하거나
아니면 pip install xxx 로 설치를 하였습니다.
 
그렇게 하다보면, 나중에 개발 환경의 서버는 온갖 Third-party 모듈들로 가득차서
실제 운영환경과는 엄청 다른 결과를 야기하고, 또한 각 모듈별 버전 차이에 따른
문제가 발생할 수 있습니다.
 
실은 이런 문제는 윈도우의 DLL 버전 차이 문제나,
Linux의 shared library 등의 동적 라이브러리 등에서도 같이 나타나는 문제이고
이런 문제를 해결하기 위해서 별도의 패키징 (데비안, 우분투에서의 aptitude,apt-get;
Redhat,페도라,CentOS 등의 rpm, yum; 또는 특이하게 이런 디펜던시 문제를
가장 줄일 수 있지만 가장 빌드시간이 많이 드는 Gentoo 리눅스와 같이
emerge를 이용한 소스 빌드 방법도 있습니다) 시스템이 이런 디펜던시 문제를 
해결하려고 하고 있지요. (그럼에도 불구하고 사용자가 다른 버전의
라이브러리 등을 개별 설치해서 발생할 수 있는 문제는 여전히 존재합니다)
 
물론 Java나 DotNetFramework와 같은 Sandbox 라고 해서 문제가 없는 것은 아닙니다.
이런 VM은 또 자체 버전에 따라 문제가 발생할 수 있고,
시스템에 역시 개별 VM을 버전에 따라 지정할 필요도 있지요.
 
파이썬도 마찬가지 입니다.
실제 개발 당시의 라이브러리, 모듈 등의 환경과,
차후 몇년간 운영될 환경이 서로 같지 않아서 발생하는 온갖 문제에
시달리고 싶지 않다면 virtualenv로 환경을 갖추고
필요에 따라 App 별, 혹은 버전별 별도의 운영 환경으로 작업을 하는 것이 필요합니다.
 
이런 것을 염두에 두고 알아낸 사실을 공유해 볼까 합니다.
 
일단 VirtualEnv를 사용하기 위해서는 PIP 라는 (pypi.python.org) 라는 별도의
파이썬 패키지 관리자를 이용하는 것이 제일 좋습니다.
 
우분투 12.04에서 작업한다고 할때, PIP 및 virtualenv를 설치하는 가장 좋은 방법입니다.
 
쉘 스크립트에 다음을 추가하여 실행합니다.
##########################################################################################
#
# Python module installation by pip and virtualenv
#
##########################################################################################
pip list
if [ $? -ne 0 ];then
    sudo apt-get -y install python-pip
    sudo pip install --upgrade pip
    sudo ln -s /usr/local/bin/pip /usr/bin/pip
    sudo pip install -U distribute
    sudo pip uninstall virtualenv
    sudo pip install virtualenv
    sudo pip install sfood  # only for finding python module dependency
fi
 
우분투 12.04에서 설치되는 python-pip는 pip list 명령이 없는 구 버전이기 때문에 위와 같이 pip list
명령으로 체크를 하였습니다.
 
이제 virtualenv 로 작업을 하는 것을 간단히 보면,
 
$ virtualenv myApp
 
명령을 내리면 myApp 라는 폴더와 함께 그 안에 모든 virtualenv 환경에 필요한 Python 인터프리터 부터
시작하여 관련 작업을 들어가게 되는 환경(폴더)이 만들어 집니다.
 
또한 해당 가상환경을 이용하기 위하여
$ source myApp/bin/activator
라는 명령을 수행해 줍니다.
 
그러면 (myApp) 라는 내용이 쉘 프람프트에 추가되어 보입니다.
 
(myApp) $ 
 
여기서 pip로 설치를 하나 해 보면,
 
(myApp) $ pip install psutil
 
와 같은 식으로 설치를 할 수 있고, 이것은 myApp/lib/python2.7/site-packages
안에 설치가 됩니다.
만약 위와 같은 virtualenv 환경이 아니었다면,
$ sudo pip install psutil
과 같이 sudo를 이용하여 /usr/local/lib/python2.7/dist-packages (혹은 site-packages) 와 같은
시스템 폴더에 넣어야 합니다. (모든 파이썬 App에 공통적인 것이 아니라면
이와 같은 시스템 설치는 자제하는 것이 좋습니다)
 
가상환경에서 해당 패키지를 개발하는 동안 여러개를 설치했고,
이를 살펴보면,
 
(myApp) $ pip list
argparse (1.2.1)
pexpect (3.0)
pip (1.4.1)
psutil (1.2.1)
pymongo (2.6.3)
setuptools (1.1.5)
wsgiref (0.1.2)
 
와 같이 나옵니다.
 
그런데 이 환경을 쉽게 스냅샷처럼 가지고 있다가 (꼼짝마 freeze 라는 명령이 있습니다)
차후에 다른 곳에서 쉽게 다시 해당 모듈을 설치할 수 있습니다.
 
(myApp) $ pip freeze > myApp.req
 
위와 같이 하면 위에 list 했던 결과가 myApp.req 라는 파일에 저장됩니다.
 
그리고 다른 호스트 혹은, 가상환경에서
 
(anotherApp) $ pip install -r myApp.req
 
와 같은 식으로 해당 환경을 갖출 수 있습니다.
 
 
다음은 PyCharm 이라는 JetBrarins 사의 파이썬 전용 IDE를 사용하는바,
PyCharm을 이용한 VirtualEnv 와의 연동도 살펴보겠습니다.
 
위와 같이 PyCharm의 Settings 에서 파이썬 인터프리터 지정하는 곳에 우측 "+","-" 아래 아래에 있는 Create Virtual Environment 툴을 누릅니다.
 
그러면 위와 같이 나타나고 해당 위치와 어느 파이썬 인터프리터에서 가져오겠는가를 지정하면,
 
새로운 가상환경이 만들어 집니다. 이제부터는 해당 가상환경으로 작업을 할 수 있습니다.
 
또한 기존에 만들어진 가상환경도 가져올 수 있습니다.
 
위와 같이 Local을 선택하고 (Remote 를 눌러 원격 디버깅도 가능한데, 원격에서의 VirtualEnv 연결은 아직 해결 못하였습니다)
 
이미 만들어진 가상환경의 bin/python을 선택하면,
 
위와 같이 Add virtualenv 대화창이 나타나고, OK를 눌러 
 
위와 같이 나타나는 것을 알 수 있습니다.
 
또한 현재 가상환경의 설치된 패키지 목록이 하단에 "Packages" 목록에 나타납니다.
 
외부의 터미널에서 가상환경에 들어가서 (위의 source myApp/bin/activator 명령)
pip install 을 하듯이, 동일한 작업을 위 화면의 중앙 우측의 "Install"을 눌러봅니다.
 
그럼 위와 같이 패키지 목록이 나옵니다. (하단의 Manage Repository 단추를 이용하여 저장소도 추가할 수 있군요.)
 
여기에서,
 
상단에 psutil 을 검색하고 하단 "Install Package" 를 눌러 설치를...
 
하려고 하였으나, python-dev 패키지가 설치되어 있지 않아 오류가 발생하였습니다.
(psutil 이라는 모듈처럼 종종 c 컴파일을 하여 파이썬 모듈로 붙이는 경우도 많습니다)
 
$sudo apt-get install python-dev
패키지를 설치하는 오류가 발생하면, 다음을 참고합니다.
 
재 설치를 하여 정상 설치된 것을 확인 할 수 있습니다.
 
그런데 만약,
 
위와같이 외부 터미널의 동일 가상환경에서 다른 모듈을 설치하였다면,
 
위와 같이 우측 깔때기 모양의 단추를 눌러 현재 모듈의 추가된 것이 있는지 업데이트 할 수 있습니다.
 
이로써 파이썬의 가상환경을 살펴보았습니다.
이를 잘 활용하여 개발환경의 복잡도 및 배포의 문제점 등을 미리 미리 예방하는데
활용할 수 있습니다.
 
 
어느분께는 도움이 되셨기를...
 

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
97 텐서플로우 시작하기 file 졸리운_곰 2016.11.25 773
96 Flask by Example - Integrating Flask and Angular file 졸리운_곰 2016.11.20 702
95 Integrating Python and R Part III: An Extended Example file 졸리운_곰 2016.11.16 527
94 Integrating Python and R Part II – Executing R from Python and Vice Versa 졸리운_곰 2016.11.16 1543
93 Integrating Python and R into a Data Analysis Pipeline – Part 1 졸리운_곰 2016.11.16 635
92 Calling R from Python file 졸리운_곰 2016.11.16 450
91 [python] BeautifulSoup으로 웹에 있는 데이터 긁어오기 졸리운_곰 2016.11.15 586
90 파이썬으로 XML 처리하기 졸리운_곰 2016.11.15 388
89 [python] httplib — HTTP protocol client¶ 졸리운_곰 2016.11.15 548
88 virtualenv를 사용하자 - 가상 개발환경 구축하기 졸리운_곰 2016.11.13 502
87 SQLAlchemy 시작하기 – Part 2 졸리운_곰 2016.11.11 610
86 SQLAlchemy 시작하기 – Part 1 졸리운_곰 2016.11.11 658
85 python torrent 자동 다운로드 : How to automatically search and download torrents with Python and Scrapy 졸리운_곰 2016.11.02 875
84 Flask에서 SQLAlchemy 사용하기 졸리운_곰 2016.10.30 725
83 Apache와 Python 연동하기 졸리운_곰 2016.10.16 1612
82 파이썬으로 개발된 놀라운 라이브러리들! 파이썬 만세! file 졸리운_곰 2016.08.10 7038
81 윈도우에서 파이썬 설치하기 (virtualenv, pip 사용법) file 졸리운_곰 2016.08.08 1080
» [Python] 파이썬 실행환경의 독립 virtualenv & PyCharm file 졸리운_곰 2016.08.08 791
79 Python virtualenv 사용법(MAC기준,pip사용) file 졸리운_곰 2016.08.08 456
78 virtualenv를 사용하자 - 가상 개발환경 구축하기 졸리운_곰 2016.08.08 460
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED