블로그 이미지
자유로운설탕

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

2017. 2. 8. 21:54 프로그래밍

  두번째 시간이다. 이번엔 파이썬 버전을 선택하는 문제에 대해서 얘기를 해보고 해당 파이썬 버전 및, 실습 환경을 선택한 이유에 대해서 설명 후, 실제 파이썬을 설치하고, 1교시에 나왔던 각 언어요소별 샘플 파일들을 실행해 결과를 보려한다.

 

목차

0. 왜 파이썬 공부에 구글을 이용하는게 좋은가?

1. 언어를 바라보는 방법. 파이썬을 어떻게 바라봐야 할까?

2. 파이썬 설치와 환경, 버전 선택 하기의 이유.

3. 만들고자 하는 기능을 모르는 조각으로 나눠 조사해 보기

4. 데이터 베이스에서 내용 가져와 출력하기

5. 암호화 모듈을 이용해 암복호화 해보기

6. 퍼즐 조각들을 합쳐보기

7. 엑셀 파일 사용해 보기 -> 부록 : fuction 을 이용해서, 코드 정리해 보기

8. 정규표현식을 왜 사용해야 할까? 언어속의 미니 언어 정규표현식 살펴보기

9. 입력과 결과를 GUI 화면과 연결해 보기

10. Whois API 이용해 보기

11. 웹페이지 호출해 내용 파싱 하기(BeautifulSoup 그리고 한계)

12. 자동화 - 웹 자동화(with Selenium)

13. 자동화 - 윈도우즈 GUI 자동화(with pywinauto)

14. 자동화 - 작업 자동화

15. 수학 라이브러리 살펴보기

16. 그래픽 라이브러리 살펴보기

17. 머신러닝에서의 파이썬의 역활

18. 웹 프로그래밍 - Legacy Web

19. 웹 프로그래밍 - Flask 살펴보기(feat. d3.js)

20. 웹 프로그래밍 - Django 살펴보기

21. 정리 - 이런저런 이야기

 

 

 

 

[들어가면서]

  우선 시작에 앞서 처음 프로그램 언어 공부하는게 왜 어려울까에 대한 얘기를 잠시하려 한다. 

 

  "A씨는 php 로 웹 프로그래밍 공부를 시작한다. 책에 나온 문법을 열심히 따라하는데 갑자기 html 이라는 조금 아는 언어가 끼어든다. 테이블을 출력하고, form 을 던지고 하더니, 조금 더 나아가니 db(database) 라는 녀석이 출현을 해서 php 에서 데이터를 저장하고 조회하고 한다. db를 잘 이용하려면 SQL 이라는 언어를 잘 알아야 한다고 한다. 뭔가 동적으로 움직이는 페이지를 만드려면 자바스크립트 라는 또 다르게 생긴 언어도 필요하단다. referer 얘기가 나오면서 http 헤더 얘기도 나오고, get, post 등등이 나오며 점점 내용이 복잡해 진다. html 과 비슷하게 생긴 xml 이라는 언어는 왜 또 책 뒷부분에 찜찜하게 스쳐가듯 언급되는지... 샘플을 그대로 보고 입력해서 실행하는데 에러는 계속 나고, 에러메시지는 이해가 잘 안가서 어떻게 해결하는지도 잘 모르겠다. php 는 참 어려운 언어같다. 남들은 웹프로그램이 제일 쉽다고 하던데 언어하나 배우는게 왜 이렇게 어려운가 싶다."

 

  위의 경험은 처음에 이런저런 언어를 공부한다고 책을 이것저것 잡히는 대로 볼때 마찬가지로 경험했던 현상이다. 첨엔 뭔가 잘 알것 같은 분위기 였는데, 진행하면 할수록 오리무중에 빠져버린다. 그런데 찬찬히 따져보면, 우리가 어려워 하는건 php 언어가 아니다. 언어는 한 측면에서 보면 껍데기에 불과할 수도 있다. php 를 배우면서 평생 처음 보는(또는 불완전하게 아는) db 에 쿼리를 던지는 것은, 말을 막 배우기 시작한 애들이 철학을 논하는 거랑 비슷한 상황이 된다. 중요한 것은 말을 배우는게 어려운게 아니라는 거다. 철학을 이해하지도 못하면서 그 말로 표현하려는게 문제지 말이다. (물론 말 배우는 건 어렵긴 하다;)

 

  프로그래밍 언어는 혼자서 움직이는게 아니라 미리 만들어졌거나 근간이 되는 여러 다른 언어와 시스템 들을 사용한다. 컴퓨터 화면(GUI), 디렉토리, 파일, database, http protocol, javascript, css, ajax, json, xml, 정규식, ftp, webserver, 메모리, 레지스터, 이미지 등등, 게다가 수학 및 물리학 같은 여러 도메인 지식을 포함한 그 밖의 많은 것과 함께 말이다. 그러다 보니 첨에 프로그래밍을 공부하다보면 언어의 본질적인 어려움이 아닌 언어가 접근하고자 하는 대상을 이해 못해 막힐수 밖에 없다. 그렇다고 문법만 공부하면 영원히 현실적인 주제들과 유리되어 버리고, 너무 현실적인 예제로 공부하게 되면, 기초 지식의 부족으로 쉽게 진도가 안나가고 지치게 되버린다. 아님 어찌어찌하게 따라가 마무리를 했더라도 조금 지나게 되면 뭘 했는지도 기억이 가물가물한 허무한 상태가 된다.(물론 형상화 되진 않았지만 작은 경험치가 쌓이긴 한다) 

 

  결과적으로는 적절한 문법 난이도와, 위에 언급한 한 두가지의 외부 접점을 연결시켜 공부하는게 바람직한 방법 같다고 생각한다. 그 배경하에서 왜 해당 언어의 각 문법 요소들이 굳이 언어에 존재해야만 하는지에 대한 필요성을 차근히 느낀다면 단지 외우는 프로그래밍이 아닌 인지하는 프로그래밍이 될 듯하다. 어떤 분야건 중요한건 스스로 마음속에 배우려는 대상에 대해 어떤 모델을 구축해 이해하느냐 이다. 어떤 측면에선 문법은 상세히 몰라도 괜찮다. 구글을 통해서 얼마든 문법은 찾아 이해해 적용하면 된다. 요는 문법 보다는 why? 이다. 책을 고를때도 그런 책을 잘 골라보는 게 좋다. 반대로 얘기하면 한 언어에 국한되더라도 저런 연결된 주제들을 적절한 깊이로 잘 이해한다면 다른 언어에 접근할 때 이미 아는 주제를 어떻게 이용하는가에만 집중할 수 있어 편하게 된다. 어차피 이용하는 방식은 고급언어로 갈수록 비슷해지니까 말이다. 마지막으로 막다른 길에 다달았을때 해당 부분에 대해서 힌트를 제공해 줄수 있는 사람이 있다면 더 좋을 건 없을 듯하다.

 

  사실 이 부분은 프로그래밍 뿐만 아니라 보안이나 테스팅 등 다른 분야를 공부할 때도 마찬가지인 부분 같다. 또 다른 예를 들자면 하둡 같은 빅데이터관련 시스템이나, 머신런닝을 배우고 싶어하는 분들이 리눅스의 기본적인 개념들에 대해서 모르고 있다면 아마 리눅스 서버에 프로그램 세팅하는 순간 부터 이해 안가는 개념들(사용자별 권한, ssh 설정, 환경변수, 모듈 설치, 서버간 동기화, 각종 디렉토리 파일 관련 명령어) 때문에 헤메느라 정작 실제 원했던 하둡 운영에 대해서는 쉽게 다가가지 못하게 될 가능성이 높을 것이다.

 

 

 

[파이썬 2.x vs 3.x 사이의 선택]

  파이썬 공부를 시작하면서 제일 먼저 고민한 부분은 버전 선택이다. 구글에서 "python download" 로 검색해서, 들어가는 파이썬 홈 페이지에서 제일 먼저 보는것이 2.x 대 버전과, 3.x 대 버전의 두개의 다운로드 링크 이다. 현재 기준으로 3.6과 2.7.13 버전이 나타난다.

https://www.python.org/downloads/

 

 밑에 박스 친 링크를 보면 어떤 버전을 선택할지 모르는 사람들을 위해서, 두 개의 버전을 비교한 링크가 있다. 앞으로 적은 부분에 대해 스스로 객관적인 판단을 하기위해 위의 링크의 비교 글을 한번은 살짝 읽어보길 바라며, "파이썬 2 3 선택" 으로 찾은 2개의 한글 페이지들을 소개해 본다.

https://b.ssut.me/python%ec%9d%98-%eb%af%b8%eb%9e%98-python-3%ec%9c%bc%eb%a1%9c-%eb%84%98%ec%96%b4%ea%b0%80%ea%b8%b0/

https://kldp.org/node/129183 

 

  우선 파이썬 2를 옹호하는 사람들은 현재 많은 회사에서 파이썬 2 기준으로 프로그램들이 개발되어 있어 실제 일을 할때 현실적인 버전이고, 외부 모듈들도 대부분 2 는 완벽히 지원하지만, 3 는 지원 안하거나 미지원 되는 모듈들이 많고(이 부분은 정확히 얘기하면 2를 지원하는 모듈들이 더 이상 3를 미지원 하는 문제일 것이다. 코드를 변경할 수고만 감당한다면 같은 기능을 가진 파이썬 3용 새로운 모듈들로 대체될수 있는 가능성도 있다고 본다), 성능 측면이나, 개발과 관련된 기술 문서를 웹에서 찾는데 불리하다는 얘기이다. 파이썬 3를 옹호하는 사람은 파이썬 2는 2020년에 지원이 만료된다는 예정이 있고, 2에서 구조적으로 개선된 여러 언어기능이 파이썬 3에는 있지만, 2는 앞으로 유지보수 정도 수준으로만 개선될 예정이기 때문에 3로 가는게 맞다는 것이다.(아마 파이썬 3의 모듈 호환 문제 같은 경우는 점점 개선될 거 같긴 하다)

 

  저도 원래 시작은 2.7로 시작했다. 근데 mssql db 에서 한글로 된 내용을 가져와 cmd 화면에 표현하려 했는데, 아래와 같이 한글 출력 부분에서 유니코드 변환 에러가 났다.

  구글링을 해서 아래 utf-8 관련 코드를 상단에 추가해서 위의 인코딩 에러는 안났는데, 이후엔 아래와 같이 한글이 깨져보인다.

# -*- coding: utf-8 -*-
import sys
reload(sys)

sys.setdefaultencoding('utf-8')

 

  또 구글링을 해보니 한글 윈도우 cmd 창의 디폴트 코드 페이지가 cp949 라서 그렇다고 해서 아래 명령어를 통해서 cmd 창의 코드 페이지를 utf-8로 변경해 봤다.

>> chcp 65001

 

  이후 다시 샘플을 실행해 보면 아래와 같이 정상적으로 나오긴 한다.

  이렇게 한바탕 헤메며 진을 빼고나서 보니 mssql 등 db와 연동 했을때 파이썬 2 버전의 한글 처리에 대해서 명확하게 구글에 정리된 자료는 없는 듯도 하다.(물론 잘 정리되어 있는데 유니코드 및 한글 인코딩 구조에 대해 까막눈이라서 못 찾았을 수도 있다--;) 그런데 이런 인코딩 오류 부분은 서양 언어가 아닌 동양 언어 국가의 비애인데, 대부분의 프로그래밍 언어나 라이브러리, 유틸리티들이 처음 시작 될때는, 한글, 한자 같이 2byte 언어를 고려한 유니코드 대응 설계를 하지 않는다는 것이다.  많이 유명해지고, 2byte 권 사용자들이 개발자에게 불만을 계속 토해내게 되야, 겨우 유니코드 반영이 되긴 하는데 이 시점이 보통 상당히 늦고, 그나마 불완전하게 땜빵 설계로 되는 경우도 종종 있는 듯 하다. 물론 데이터를 모두 영문으로만 쓰면 괜찮겠지만, 세상일이 어찌될지도 모르고 이렇게 한글이 나올때마다 처리에 신경 써야 되는 부분은 귀찮은 건 사실이다. 좀더 전문적인 파이썬 2.x 의 한글 처리에 대해서는 아래 글을 참고하자.

http://ifyourfriendishacker.tistory.com/5

 

  그래서, 3.x 대 버전을 설치 후 동일한 코드를 돌려봤는데(print 문법 차이 땜에 조금 바꾸긴 했다), 해피하게도 기본적으로 유니코드를 잘 지원해서 위에 언급된 유니코드 관련 코드들을 안 넣어도 한글이 정상적으로 cmd 창이나 엑셀 파일 등에 잘 출력된다. 그래서 주저 없이 파이썬 3를 사용해 학습하는 것을 선택하게 되었다.    

 

 

 

[산 넘어 산 - 학습을 위한 3.x 버전 선택]

  일단 3버전으로 하기로 한 후에도 다시 고민이 생기게 되었다. 최신 버전을 사용하느냐 약간 이전 버전으로 사용하느냐에 대한 문제 였다. 마이너 버전 끼리의 기능 차이는 별로 없을 가능성이 높은 상태에서 최신 버전의 가장 큰 문제는, 모듈 호환성 관련 문제 발생시 아무래도 구글에 참조할 만한 글들이 많지 않을 가능성이 높다. 또 모듈 설치시 편한 pip 명령어를 사용하려면 최신버전은 아무래도 모듈 호환성 업데이트가 안되있을 수 있어 좀 불리하다. 처음 시작하던 때에는 3.5.3 이 최신 이여서 이것저것 막히는 걸 해결하면서 왔는데, 현재는 3.6이 2016년 12월 중순에 나와있긴 했다. 그래도 최신으로 해야 되지 않을까 해서 몇 가지 모듈 테스트를 한 결과 3.5.3에서 잘 설치되는 모듈이 3.6에는 빌드에러가 나서 설치가 안되는 일이 발생했고, 구글에도 딱히 가이드 삼을 문서가 없어서 현 블로그에서 설명은 3.5.3 기준으로 진행하려 한다. 물론 2.x 과의 선택에서도 마찬가지 였지만, 지금 일어나는 호환성 문제는 세월이 지나면 모듈들이 업데이트 되면서 자연스럽게 해결 날 수도 있다.

 

 

 

[파이썬 3.5.3 설치]

  설치에 오기까지 잡담이 많이 길었지만 실제 선택하기 위해 고민한 과정을 보여주고 싶어 그런 것이라고 이해했으면 하고, 이제 버전도 정했으니 설치로 들어간다. 개인 환경은 윈도우즈 10 Home, 64비트 이다. 윈도우즈 7도 호환성은 거의 비슷한 것 같다.

 

  먼저 다운 로드를 받기 위해서 상단 다운로드 그림의 Python for windows 링크를 클릭 하거나, 구글에서 'python 3.5.3 download' 라고 쳐서 젤 처음인 아래 링크를 들어간다.

https://www.python.org/downloads/release/python-353/

  windows x86이 32비트 OS용이고, x86-64가 64비트 용이다. executable installer 가 우리가 보통 생각하는 exe 형태의 설치 파일이다. 저 같은 경우는 64비트이니 아래 파일을 다운 받았다.

Windows x86-64 executable installer

 

다운받은 다음에 실행해 보자

  'Add Python 3.5 to PATH' 를 체크하고, 설치 디렉토리를 정하기 위해서 'Customize installation' 을 클릭하자. path를 추가하는 이유는 어떤 경로에서든 python 명령어가 실행되게 하기 위해서 이다. 설치 디렉토리를 변경하는 이유는 cmd 창에서 다단계의 복잡한 디렉토리 경로로 찾아 들어가기 싫어서 이다^^; 혹 path 개념을 잘 모르신다면 아래의 링크를 참고하자.

http://dvjin.tistory.com/4

 

 

  두 번째 화면은 어차피 다 체크되 있으니 Next 를 그냥 누른다. 앞으로 우리가 자주 보게될 pip 를 설치하는 옵션이 있다.

 

 

  마지막으로 모든 사용자가 사용하도록 체크하고(어차피 혼자쓰는 컴퓨터일 테니), 경로를 c:\python 이라고 간단한게 바꿔주자(디렉토리가 없을테니 Browse 버튼 누르지 말고, 걍 텍스트 박스에서 수정하자). Install 버튼을 누르면 파이썬이 설치 완료될 것이다.

 

 

  그럼 실행을 해보기 전에, 메모장과 cmd창(도스창)에서 실행을 하라고 얘기하는게 왠지 구닥다리 방식 같아서, 구글로 'python ide' 라고 검색해 보니, visual studio 를 이용하는 방법, eclipse 를 이용하는 방법, 그리고 현재는 pycharm 이라는 툴이 많이 쓰이는 거 같다.(프리, 상용) 하지만 IDE 로 설명하게 되면 왠지 조금 더 복잡하게 될거 같기도 하고, 또 처음에는 IDE 를 사용 안하고 cmd 창에서 live 하게 실행해 보는 것도 구조 이해에 도움도 될거 같고(리눅스에서 실행하면 어차피 이런 모드기도 하다), 저도 현재는 텍스트 에디터에 cmd 화면을 이용해 사용하고 있는 형편이고 코드도 클래스니 구조화니 그런건 없어서 파일 하나면 되기 때문에, 예쁜 IDE 사용여부는 아래의 링크를 참고하고, 다른 블로그에도 많긴 하지만 나중 시간에 pycharm 이나 설치하고 사용하는 예를 들까 싶다. 

http://yaraba.tistory.com/173

http://cksl.tistory.com/31

http://noeticforce.com/best-python-ide-for-programmers-windows-and-mac

 

 

  그럼 윈도우즈 10에서 명령 프롬프트(관리자)를 실행 한다. (혹시 더 초보셔서 윈도우즈 10에서 명령 프롬프트 실행을 모르시면, 아래 링크를 참고 한다-좀 10이 이리저리 숨겨놓긴 한듯 하다;) http://slic.tistory.com/410 

  ※ 팁으로 만약 윈도우즈 10 UI 가 넘 화려해서 싫은 저 같은 분은 classic shell 이라는 프리웨어를 설치하시면 익숙한 7 스타일로 시작 메뉴 등을 사용할 수 있다. http://windwaker.net/2096

 

 cmd 창이 뜨면 python 이라고 친다. 아래 같은 특이한 프롬프트의 창이 뜨면 정상적으로 설치한 것이다.

ctrl+z 키를 누른 후 enter 키를 눌러서 원래의 도스창으로 돌아온다.

 

 

 

[샘플들 실행해 보기]

자 그럼 1교시 때 언급한 샘플 파일들을 하나씩 실행해 보자. 

먼저 변수 얘기할 때 만들었었던 친구들의 빵 갯수 더하기 코드를 보자

1
2
3
4
5
breadfriend = [23456]
 
breadfriend_sum = sum(breadfriend, 0.0)
 
print(breadfriend_sum);
cs

 

위의 내용을 복사하여 메모장에 붙여 넣어보자.  c:\python 폴더 밑에 코드들을 저장할 code 라는 디렉토리를 만들자. 메모장 내용을 저장 하면서 파일형식을 '모든 파일'(그래야 원하는 확장자로 저장된다), 이름을 breadcount.py 라고 만들어 놓은 code 라는 폴더에 저장한다. (첨 실행이라서 혹시나 해서 몰라서 아래 스크린샷을 추가한다. 담부터는 힘들어서 말로만 --;)

 

 

  이후 cmd 창에서 c:\python\code 창으로 이동한다. 이 부분도  첨이니까 기초부터 설명하고 스크린샷을 첨부한다. 

이동하는 방법은 처음 cmd 창이 뜨면 c:\windows\system32 폴더일 것이다. 여기서

1) cd / 후 enter(c:\ 로 가게된다)

2) cd python\code 후 enter 하게 되면 프롬프트가 c:\python\code 로 되어 있을 것이다.

(이 부분도 첨이자 마지막 스크린샷)

 

  자 첫코드가 실행되어서 다섯개의 빵의 합인 20이 나오게 되었다. 다시 한번 얘기하지만 지금 이 메모장과 도스창으로 하는 작업이 익숙하지 않다면, 프로그래밍 자체가 아닌 연결되어 있는 배경지식이 필요한 경우이다. 이 경우 가능한 바로 IDE 를 사용하지 말고 지금 하는 구식 방법을 조금 사용해 보는 것도 추천 한다. 헤메면서 얻은 지식은 잊혀지지 않기 때문이다.(단 코드가 복잡해지면 메모장은 한계가 있기 때문에 위의 링크에 추천한 IDE 나 문법을 칼라로 표시해 주는 선호하는 편집기를 쓰는게 낫다.)

 

 

  두번째 부터의 실행 코드 예제는 언어구조 개념에서 설명했던 예들의 코드들을 가져와 보자

 

  두번째 객체 예를 보이는 writefile.py 의 샘플은 아래와 같다.

 

1
2
= open('test.txt''w')
f.write("This is a test")
cs

 

  2줄인 엄청 간단한 코드로, 다른 언어를 하나라도 공부해 본 분들은 한번 쯤 파일 작업 할때 봤던 비슷한 코드 일 거다.(물론 옛날 언어에서는 조금 더 장황하게 써야했다). 코드를 설명하자면 test.txt 라는 이름을 가진 파일 객체를 write(w: 쓰기) 모드로 열어서, 그 안에 "This is a test" 라고 내용을 적는다. 저 open 이라는 명령이 파일 test.txt 라는 이름을 가진 파일 객체를 만든다는 모습을 보여주는 코드라고 생각해 6)번 샘플로 만들어 봤다.

 

  실행은 똑같이 메모장에 붙인 후 c:\python\code 테이블에 writefile.py 라고 저장 후, cmd 창의 해당 폴더에서 python writefile.py 입력 후 폴더안을 보면 "This is a test" 내용이 적힌 test.txt 파일이 생성되어 있을 거다.

 

 

  세번째는 함수 예를 보여주는 function_sample.py 이다.

1
2
3
4
5
6
7
8
def myfn(x):
    if x > 100:
        print("over 100")
    else:
        print("under 100")
        
myfn(120)
myfn(90)
cs

 

  자 파이썬 문법에 대해 공부한건 별로 없지만, 대충 보면 def myfn(x) : 부분으로 함수가 시작되고, 다른 언어에서 { ( 등으로 구분되던 부분은 아무래도 스페이스나 공백으로 구분 되는 듯 하다. 위의 예는 tab 으로 함수 안의 빈 공간을 채워놨다.

 

  예를 들어 밑에 처럼 앞의 if x > 100; 앞의 tab을 2개로 해서 else 와 tab 수를 다르게 한다면 아래와 같은 문법 에러가 난다. 번거로운 경계 문자들을 없앤 대신 만드는 사람이 로직에 맞게 들여쓰기(indentation)를 명확히 맞춰줘야 한다. 

 

1
2
3
4
5
6
7
8
def myfn(x):
        if x > 100:
        print("over 100")
    else:
        print("under 100")
        
myfn(120)
myfn(90)
cs

TabError: inconsistent use of tabs and spaces in indentation

 

위의 첫번째 정상 코드를 실행 하면, 정의한 함수 myfn 에 120 과 90의 값이 넘어가서, 각각 결과가 나오게 된다.  

C:\Python\code>python function_sample.py
over 100
under 100

 

 

  네번째 예는 클래스 내의 method 를 보여주는 upper_method.py 이다.

1
2
3
input = "This is a sample"
result = input.upper()
print(result)
cs

 

  고급언어로 갈수록 string 같이 단순한 문자열을 담는 기본 변수들도 클래스로 정의되어, 해당 변수에 담겨있는 데이터에 대해 클래스에 내장된 유용한 메쏘드를 사용할수 있게 한다. 위의 예에서 고전 언어 같은 경우는 upper 라는 따로 만든 함수에 input 문자열을 넘겨줬어야 했었을 테지만, 파이썬은 input 변수 자체가 upper 라는 메쏘드를 소유하고 있어 스스로 바로 변환을 한다.  

C:\Python\code>python upper_method.py
THIS IS A SAMPLE

 

 

  다섯번째 예는 내부 라이브러리(파이썬의 경우 모듈)을 사용하는 library_sample.py 예이다.

1
2
3
4
import statistics
 
data = [3746]
print (statistics.mean(data))
cs

 

  기본적으로 파이썬 기본 기능에서는 배열의 평균을 한번에 구할 수는 없다. 위에선 import 명령어를 이용하여 기본 통계(statistics) 모듈을 가져온 후, 통계 모듈안에 있는 mean 기능을 이용하여(statistics.mean(data)) 배열의 평균을 구해서 출력 한다. 실행 결과는 아래와 같다.

C:\Python\code>python library_sample.py
5

 

 

  마지막 예는 우리가 이제 것 cmd 창 화면으로만 사용했던 파이썬 기능을 우리가 쓰는 윈도우 창과 같은 GUI 화면에 표시해 주는 예이다. 실제 구현 예는 차후 보겠지만, 맛보기 샘플을 위해서 해야될 일도 적지는 않다. 우선 구글에서 어떤 gui 모듈을 사용할지를 판단해야 한다.

  구글에서 'python gui' 라고 검색을 하고 보다가, 아래의 글을 보게 되었다. 2015년도니 기간도 적당하고, 참고할만 한듯 하다.  

http://insights.dice.com/2014/11/26/5-top-python-guis-for-2015/

 

  이외에도 구글 상위순으로 이런 저런 글들을 보다 보면 제일 많이 나오는게 pyqt 와 wxpython 인거 같다. (너무 과거의 문서가 상위에 나오면 도구 옵션에서 날짜를 1년 정도로 제한하는 것도 좋다) 

 

  그럼 다시 구글에서 'wxpython vs pyqt' 라고 검색을 해보자. 나름 기술 적으로 활발한 토론이 이루어 지는 듯한 reddit.com(클리앙에서 아이폰 탈옥 관련할때 자주 언급되는 곳이다)의 2015년도 글을 하나 보자

https://www.reddit.com/r/learnpython/comments/3pif4k/tkinter_vs_pyqt_vs_wxpython/

 

  대충 보면 파이썬에서 기본제공하는 Tkinter 라는 기능은 배우긴 쉬운데 기능이 넘 단순하고 수동으로 해야되는 일이 많고, pyqt 는 제일 기능은 편하지만, 상업적으로 사용하기엔 라이센스 관계가 복잡하다고 한다(아니라는 댓글도 같이 달려 있다). wxpython 은 어중간 한 위치인가 보다. 일단 저는 어중간한 wxpython 을 선택하게 됬다. 어차피 gui 라이브러라는게 비슷비슷하기 때문에 하나를 감을 잡으면 다른 것들은 적당히 적응할 수 있을 것이라고 생각하고 말이다.(개인적으로 예전에 matlab이라는 언어에서 gui 라이브러리를 좋아해 이런저런 걸 만들었어서 조금은 더 익숙 할 것은 같다)

 

  그럼 python 에서 pip 를 이용해 wxpython 을 설치해 보도록 해보자. pip 는 윈도우의 프로그램 추가 삭제를 cmd 창으로 옮겨놓은 버전이라고 봐도 될듯하다. 리눅스의 apt-get, yum 같이 특정 프로그램을 해당 명령어를 이용해 설치하겠다고 정의하면 (아마) 의존성 까지 고려해서 한번에 설치하거나 삭제해 주는 프로그램 이다. 설치된 패키지는 python 폴더내의 tools 폴더안에 들어가게 된다.  https://ko.wikipedia.org/wiki/Pip

 

  일단 파이썬 3를 wxpython 이 지원할지 안할지 모르는 상태니, 구글에서 'python3 wxpython pip' 이라고 쳐보자. 그런데 첫번째 글을 읽어보니, wxpython 은 2.x 대만 지원하고 3.x 를 지원하기 위해서, wxpython Phoenix 이란거로 모듈이 분리되었다고 한다.

  http://stackoverflow.com/questions/28029760/wxpython-in-python-3-4-1

 

  스택오퍼플로어에 가이드 된데로 cmd 창에서 아래 명령어를 실행시킨다.

pip install -U --pre -f https://wxpython.org/Phoenix/snapshot-builds/ wxPython_Phoenix

 

 뭔가 한참 진행되더니 성공적으로 설치되었다고 뜬다. happy case 다.

Installing collected packages: six, wxPython-Phoenix
Successfully installed six-1.10.0 wxPython-Phoenix-3.0.3.dev2812+b3485d4

 

  그럼 이제 GUI 창을 맛보기로 띄워주는 wx_sample.py 내용을 보자

1
2
3
4
5
6
7
8
9
import wx
 
app = wx.App()
 
window = wx.Frame(None, title = "wxPython Frame", size = (300,200)) 
panel = wx.Panel(window) 
label = wx.StaticText(panel, label = "Hello World", pos = (100,50)) 
window.Show(True) 
app.MainLoop()
cs

 

  얘는 어쩔 수 없이 코드가 조금 길다. 간단히 설명하면 저 복잡한 구조는 우리가 매일 쓰는 윈도우 어플리케이션의 구조와 연관되어 있다. 설치한 wxPython 라이브러리를 가져오고(import wx )-> 어플리케이션 객체를 하나 만든다(ws.App)-> 어플리케이션 객체안에 작은 윈도우를 하나 만들고(wx.Frame)-> 윈도우 창에 넣을 판데기 공간(패널)을 하나 만든다(wx.Panel)->  패널안에 넣을 Hello World 텍스트를 하나 넣고(wx.StaticText)-> 윈도우를 우리한테 보여준다(window.show)-> 이후 이벤트를 수령해 사용자 동작에 반응한다(app.MainLoop).

<google: 'wxpython app mainloop' 참고>

 

  실행을 하면 아래와 같이 Hello World 가 가운데 있는 작은 윈도우 창을 보여준다.

C:\Python\code>python wx_sample.py

 

 

  이렇게 해서 또 생각보다 길어진 2교시가 끝났다. 다음 시간에는 만들어 보고자 하는 기능을 하나 정하고 어떻게 구글을 이용해 해당 기능을 나누어 조사하여 원하는 기능을 만들지에 대한 부분을 진행할 예정이다.

 

 

[추가]

파이썬 3.7의 경우는 pip install wxpython 으로 설치하면 됩니다^^

 

 

2017.2.12 by 자유로운설탕
cs

 

 

posted by 자유로운설탕