윈도우/윈도우 '잘'쓰기

비주얼 스튜디오에서 파이썬 Azure Web App 개발시, env 관리

ForceCore 2016. 7. 6. 09:59

M$ Azure 에 발을 들였다. 모든게 낯선데 익숙해지면 꽤 좋을거 같긴 하다. M$의 드림스팍이 아니면 대체 어디서 공짜로 파이썬 되는 호스팅을 얻을 수 있겠는가 ㅋㅋ


문젠, 파이썬 모듈을 관리하는 것이다.


Visual Studio에서 작업할 때, 프로젝트 생성시 파이썬 모듈 관리를 어떻게 할거냐고 묻는다. 서버에서 커스텀 모듈을 설치할 때에는 서버차원에서 pip를 돌릴 수 없으니 당연히 virtualenv를 써야 한다.


그러나... VirtualEnv 관리에 대해 모르면 몇 시간 삽질해야 할 것이다.


requirements.txt 를 수정해서 안에다 쓰고 싶은 패키지를 적고, 프로젝트 Solution Explorer의 Python Environments의 env에 우클릭을 한다. Install from requirements.txt 를 하면 되는 것이 있고 안 되는 것이 있을 것이다 -_-^;;; 설치가 까다로운 것들이 있다. 컴파일까지 해야지 겨우 설치되는 녀석들인데... (OpenCV라든지 scipy라든지) 수작업으로 설치해야 한다.


수작업으로 설치하기 위해선 미리 컴파일 된 wheel 파일로 설치를 해야 하는데... 당연히 wheel 파일부터 구해야 한다.


http://www.lfd.uci.edu/~gohlke/pythonlibs/


여기에 어떤 좋은 분이 컴파일을 해서 wheel을 만들어놨다. 우린 받아서 쓰면 된다.


근데 Wheel로 설치를 하려면 pip 버전이 8대여야 하는데, env에 있는 것을 보면 한참 구버전일 것이다. 이는 pip를 업그레이드 해줘야 한다.


1. cmd 창을 띄워서 C:\Users\유저명\Documents\프로젝트명\모듈명(프로젝트명과보통동일)\env 에 들어간다.

주의: 프로젝트의 위치를 다른 폴더로 옮기지 않으면 Visual Studio 2015\Projects\프로젝트명 ... 이런 곳에 있을 텐데, Visual Studio 2015란 폴더 이름에 공백이 있으므로, activate.bat이 실행 안 되는 버그가 일어날 수 있다.


2. scripts\activate.bat 실행한다. 그러면 (env)가 프롬프트에 붙어서 지금 virtual env상태임을 보일 것이다.


3. python -m pip install --upgrade pip


4. pip install 휠파일이름.whl 로 원하는 패키지를 설치한다.


설치가 되었으면 Visual Studio에서 env 항목을 확장해봤을 때 모듈 목록에 보일 것이다.


이렇게 설치된 모듈은 프로젝트를 publish하면서 서버용 파이선 스크립트와 함께 서버에 업로드가 될 것이다.


설치된 것은 좋은데, 필자의 경우 opencv는 env 목록에 보이는데, Visual Studio에서 디버그 실행을 시키면, import cv2 를 할 때 에러가 났다. 대체 왜!!!! scripts\activate.bat 을 한 후, scripts\python 으로 파이썬 실행을 시킨다. 그러면 interactive python이 실행 될 것이다. 거기서 import cv2 를 하면 제대로 에러 없이 되었다. 근데 비주얼 스튜디오에선 대체 왜 안되는것인가!!!!!!!!!


ImportError: No module named 'cv2' 계속 이런 식으로 나오는데...


1. runserver.py 에서, Execute File in Python Interactive 여기서 실행시키면 no module 처리 된다.

2. 그거 말고 제대로 실행 (브라우저에 띄우기, 툴바에 버튼 있는거...) 하면 그런 문제는 없다.

3. Publish 이후 서버에서도 그런 에러는 없다.


결론적으로 Execute File in Python Interactive 는 못 쓰게 된다 (-_-)