'프로그래밍 언어'에 해당되는 글 59건

  1. 2011.08.31 우분투에서 ccache로 컴파일을 빠르게...
  2. 2011.08.07 Sort a HashMap by Value
  3. 2011.08.07 POD vs non POD
  4. 2011.06.12 [파이썬] 이미지 크기 변환 배치
  5. 2011.05.24 memwatch
  6. 2011.05.24 GCC옵션: finstrument-functions
  7. 2011.04.15 linker 관련 링크
  8. 2011.04.06 calloc vs malloc (7)
  9. 2010.12.28 py2exe with PMW
  10. 2010.12.28 py2exe



코딩/실행/디버깅의 전환은 매우 빠르게 이뤄져야 합니다.
놀지 말고 일하라! 가 아니라. 흐름을 유지하면서 개발하는게 좋다고 생각하기 때문입니다.

그래서 우연히 ccache란 것을 알게 되어 쓰기로 마음 먹었습니다.

설치는 간단합니다.
apt-get install ccache

사용법도 간단합니다. PATH에 /usr/lib/ccache를 걸어주면 됩니다.
export PATH=/usr/lib/ccache:$PATH

그럼 컴파일 시간을 비교해보겠습니다.
WebKit/Efl 을 다운로드 받아 빌드해서 나온 시간입니다.
각 빌드는 빌드 결과물들을 모두 제거하고 빌드한 것입니다.

1. ccache 없이 풀빌드

real 30m38.772s
user 50m25.953s
sys 5m55.686s

2. ccache 설치후 첫 풀빌드
real 31m42.091s
user 51m54.923s
sys 6m30.928s

3. ccache 설치 후 두번째 풀빌드 
real 6m19.574s
user 5m28.033s

sys 3m57.867s

상상할수 없이 빨라졌습니다.
왜 빨라진걸까요? 컴퓨터 세계에 마법은 존재하지 않습니다.
ccache는 사용자의 디렉토리에 .ccache라는 폴더를 생성하여 object 파일을 해싱하여 저장해두고 있습니다.
만약 다른 디렉토리에 ccache를 저장하고 싶다면, 아래와 같은 환경 변수를 추가로 설정해주시면 됩니다.
export CCACHE_DIR=/development/ryuan/ccache

(일반적으로는 쓸 일이 없지만, 작은 SSD를 사용중이라면 고려해볼 수 있습니다.)


# ls ~/.ccache/

0  1  2  3  4  5  6  7  8  9  CACHEDIR.TAG  a  b  c  d  e  f  stats

preprocessor를 거친 소스코드를 해슁하여 해당 키와 겹치는 object코드가 있으면 컴파일을 하지 않고 해당 object를 그냥 반환하는 방식입니다
2번 과정에서 보시는 것처럼 키가 없는 경우에는 약간의 시간이 더 걸리지만 그렇게 많은 시간은 아닙니다.


'프로그래밍 언어 > C/C++' 카테고리의 다른 글

[C++] new는 null을 return하는가?  (1) 2012.01.17
static const char* vs static const char []  (0) 2012.01.04
우분투에서 ccache로 컴파일을 빠르게...  (0) 2011.08.31
POD vs non POD  (0) 2011.08.07
memwatch  (0) 2011.05.24
GCC옵션: finstrument-functions  (0) 2011.05.24
Posted by 소혼

댓글을 달아 주세요

http://www.xinotes.org/notes/note/306/

'프로그래밍 언어 > <Java>' 카테고리의 다른 글

Sort a HashMap by Value  (0) 2011.08.07
JNI on linux  (1) 2010.12.27
[자바] 날짜, 요일 출력.  (0) 2010.11.06
[자바]일련의 숫자 임의 정렬하기  (0) 2010.07.31
[String]String.format  (0) 2010.06.16
[팁] File 읽어서 파싱하기  (0) 2010.06.10
Posted by 소혼

댓글을 달아 주세요

참고자료 : http://gpgstudy.com/forum/viewtopic.php?t=10148&view=previous
참고자료2 : http://1stpasa.tistory.com/entry/PODPlain-Old-Data-Non-POD
참고자료3 : http://stackoverflow.com/questions/146452/what-are-pod-types-in-c

POD (Plain Old Data)

메모리상에 연속적으로 나열되는 단순한 형태의 자료구조를 말한다.
C에서 사용하던 built-in type과  built-in type을 묶어서 만들어진 struct 들이 여기에 속한다.

class의 경우에는 가상함수가 있거나, 소멸자가 있거나, 할당자가 있으면 POD가 될 수 없다.

POD에 해당하는 자료구조는 memcpy를 통해 복사하는 것이 가능하다.
따라서 간단히 패킷에 실어보낼수도 있을 것이다.

버그질라에서 이런 용어를 쓰길래 찾아봤는데 왜 찾아봤던건지 기억이 안나네 ;;
 

'프로그래밍 언어 > C/C++' 카테고리의 다른 글

static const char* vs static const char []  (0) 2012.01.04
우분투에서 ccache로 컴파일을 빠르게...  (0) 2011.08.31
POD vs non POD  (0) 2011.08.07
memwatch  (0) 2011.05.24
GCC옵션: finstrument-functions  (0) 2011.05.24
linker 관련 링크  (0) 2011.04.15
Posted by 소혼
TAG Pod

댓글을 달아 주세요

아이폰용 이미지를 안드로이드용으로 바꾸기 위해 예섬에게 부탁했더니..

스크립트를 만들어서 줬다 -_-;
왜 내가 만들 생각을 못했을까? ;;

#!/user/bin/python

import os
import sys 
from PIL import Image

def walk(org_dir_path, new_dir_path):
    print "walk" + org_dir_path + " / " + new_dir_path
    for root, dirs, files in os.walk(org_dir_path):
        for name in files : 
            img_path = os.path.join(root, name)
            print 'resized file = ' + img_path
            img = Image.open(img_path)
            img_height, img_width =  img.size
            #print str(img_height) + 'X' + str(img_width)
            resize = (img_height /640.0 * 480, img_width /640.0 * 480)
            #print str(resize[0]) + 'X' + str(resize[1]) 
            changeSize(img, os.path.join(new_dir_path, name), resize)
                 
        # end of for
    # end of for
# end of function 

def changeSize(img, new_file_path, resize):
    #print str(resize[0]) + 'X' + str(resize[1]) 
    resized_img = img.resize(resize)
    resized_img.save(new_file_path)
# end of function 

if __name__ == "__main__" : 
    walk(sys.argv[1], sys.argv[2])
# end of main 

'프로그래밍 언어 > <Python>' 카테고리의 다른 글

[파이썬] 이미지 크기 변환 배치  (0) 2011.06.12
py2exe with PMW  (0) 2010.12.28
py2exe  (0) 2010.12.28
[python]XML 처리  (0) 2010.10.12
[파이썬] CSV2SQL ver 0.1  (0) 2010.08.27
[python] Windows에서 커맨드창 하나 더 띄우기  (0) 2010.08.24
Posted by 소혼
TAG 파이썬

댓글을 달아 주세요

memwatch

프로그래밍 언어/C/C++ 2011. 5. 24. 22:11 |
메모리 누수를 측정하는 툴
다운로드 URL: http://www.linkdata.se/sourcecode/memwatch/

http://blog.naver.com/PostView.nhn?blogId=lowcarpet&logNo=70029068932&redirect=Dlog&widgetTypeCall=true

간단한 예제로 실험한 결과
memwatch.log
  1 
  2 ============= MEMWATCH 2.71 Copyright (C) 1992-1999 Johan Lindh =============
  3 
  4 Started at Tue May 24 22:08:35 2011
  5 
  6 Modes: __STDC__ 64-bit mwDWORD==(unsigned long)
  7 mwROUNDALLOC==8 sizeof(mwData)==32 mwDataSize==32
  8 
  9 
 10 Stopped at Tue May 24 22:08:35 2011
 11 
 12 unfreed: <1> main.c(6), 30 bytes at 0x8a221d0   {FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE
    FE ................}
 13 
 14 Memory usage statistics (global):
 15  N)umber of allocations made: 1
 16  L)argest memory usage      : 30
 17  T)otal of all alloc() calls: 30
 18  U)nfreed bytes totals      : 30 

'프로그래밍 언어 > C/C++' 카테고리의 다른 글

우분투에서 ccache로 컴파일을 빠르게...  (0) 2011.08.31
POD vs non POD  (0) 2011.08.07
memwatch  (0) 2011.05.24
GCC옵션: finstrument-functions  (0) 2011.05.24
linker 관련 링크  (0) 2011.04.15
calloc vs malloc  (7) 2011.04.06
Posted by 소혼

댓글을 달아 주세요

추가 조사 : -finstrument-functions-exclude-file-list
 

instrument-functions 옵션은 함수의 시작과 끝에 다른 함수를 삽입해주는 옵션입니다.
용도는 다양할 것 같지만, 디버깅이 어려운 환경 - 예를 들어 임베디드, 멀티 프로세스 환경, 서버-클라이언트 구조 등에서 큰 도움이 될 것 같습니다.
그 외 많은 프로파일링 툴이 이것을 사용하여 나름의 기능을 구현하는 것 같습니다.

사용 방법은 무척 간단합니다.



__cyg_profile_func_enter 와 __cyg_profile_func_exit는 instrument 옵션이 켜졌을 때 gcc가 연결해주는 함수입니다.
이 함수들은 다른 함수들과 다르게  no_instrument_function이라는 attribute를 가지고 있습니다.
no_instrument_function는 이 함수들에는  __cyg_profile_func_enter와 __cyg_profile_func_exit를 삽입하지 말라는 뜻입니다.

간단한 예제를 짜 보았습니다.

 
이 파일을 gcc로 컴파일하고 실행하면 아래와 같습니다.
# ./a.out 
## this is main()
## this is main() -- 32 

instrument-functions 옵션을 주고 컴파일해보겠습니다.
# gcc -c main.c -finstrument-functions -g
# gcc -c test.c -finstrument-functions -g
# gcc -o b.out main.o test.o
# ./b.out 
> Enter 0x8048561
 ## this is main()
> Enter 0x804850e
> Enter 0x80484ca
> Enter 0x8048454
> Leave 0x8048454
> Leave 0x80484ca
> Enter 0x80484ca
> Enter 0x804848f
> Leave 0x804848f
> Leave 0x80484ca
> Enter 0x80484ca
> Enter 0x8048454
> Leave 0x8048454
> Leave 0x80484ca
> Enter 0x80484ca
> Enter 0x804848f
> Leave 0x804848f
> Leave 0x80484ca
> Enter 0x80484ca
> Enter 0x8048454
> Leave 0x8048454
> Leave 0x80484ca
> Enter 0x80484ca
> Enter 0x804848f
> Leave 0x804848f
> Leave 0x80484ca
> Enter 0x80484ca
> Enter 0x8048454
> Leave 0x8048454
> Leave 0x80484ca
> Enter 0x80484ca
> Enter 0x804848f
> Leave 0x804848f
> Leave 0x80484ca
> Enter 0x80484ca
> Enter 0x8048454
> Leave 0x8048454
> Leave 0x80484ca
> Enter 0x80484ca
> Enter 0x804848f
> Leave 0x804848f
> Leave 0x80484ca
> Leave 0x804850e
> Enter 0x8048454
> Leave 0x8048454
 ## this is main() -- 32
> Leave 0x8048561
 
함수의 시작과 끝에 그 함수의 위치정보가 출력됩니다.
이 정보를 이해할 수 있는 값으로 바꾸어 주는 툴이 있습니다. addr2line입니다.

# addr2line 0x804850e -e b.out -f
a
/workspace/study/c/ins/main.c:23 

이 툴을 이용해서 위 코드를 python으로 변환해보았습니다.

# python converter.py test log
[0x8048561]  > main at main.c:31
 ## this is main()


[0x804850e]    > a at main.c:23
[0x80484ca]      > b at main.c:15
[0x8048454]        > c at main.c:5
[0x80484ca]      > b at main.c:15
[0x804848f]        > d at main.c:10
[0x80484ca]      > b at main.c:15
[0x8048454]        > c at main.c:5
[0x80484ca]      > b at main.c:15
[0x804848f]        > d at main.c:10
[0x80484ca]      > b at main.c:15
[0x8048454]        > c at main.c:5
[0x80484ca]      > b at main.c:15
[0x804848f]        > d at main.c:10
[0x80484ca]      > b at main.c:15
[0x8048454]        > c at main.c:5
[0x80484ca]      > b at main.c:15
[0x804848f]        > d at main.c:10
[0x80484ca]      > b at main.c:15
[0x8048454]        > c at main.c:5
[0x80484ca]      > b at main.c:15
[0x804848f]        > d at main.c:10
[0x8048454]    > c at main.c:5
 ## this is main() -- 32

실제 프로젝트로 해봐야 피부에 와닿을 것 같습니다.
 

'프로그래밍 언어 > C/C++' 카테고리의 다른 글

POD vs non POD  (0) 2011.08.07
memwatch  (0) 2011.05.24
GCC옵션: finstrument-functions  (0) 2011.05.24
linker 관련 링크  (0) 2011.04.15
calloc vs malloc  (7) 2011.04.06
[C언어] a - b < 0 vs. a < b  (0) 2010.10.25
Posted by 소혼
TAG gcc, 옵션

댓글을 달아 주세요

ld 옵션에 관하여.
http://korea.gnu.org/manual/release/ld/ld-sjp/ld-ko_toc.html

'프로그래밍 언어 > C/C++' 카테고리의 다른 글

memwatch  (0) 2011.05.24
GCC옵션: finstrument-functions  (0) 2011.05.24
linker 관련 링크  (0) 2011.04.15
calloc vs malloc  (7) 2011.04.06
[C언어] a - b < 0 vs. a < b  (0) 2010.10.25
C로 수행시간 체크하기  (0) 2010.09.30
Posted by 소혼

댓글을 달아 주세요


둘 모두 메모리를 할당해준다는 점에서는 동일합니다.

하지만, 특정 상황에서는 어떤 것을 써야 할지 혼돈이 생기는 경우가 많습니다.
물론 대부분 calloc보다는 malloc을 쓰게 되는데 왜 이런 두 종류의 api가 존재하는 것일까 궁금하게 되었습니다.

또, calloc은 두개의 인자를 받도록 되어 있습니다.
왜 똑같이 메모리를 할당받는 데 calloc은 두개의 인자를 malloc은 한개의 인자를 받는 것일까요?
 

추: 답변글들을 꼭 읽어보세요. 이 글은 잘못된 정보를 포함할 수 있습니다.

malloc()

void *malloc(size_t size);

malloc은 size만큼의 메모리를 할당하고 (초기화 없이) 해당 힙 영역을 반환합니다.

int *ptr = malloc(10 * sizeof (int));


calloc()

void *calloc(size_t nelements, size_t bytes);

calloc는 num * size만큼의 메모리를 할당하고 해당 힙 영역을 0으로 초기화하여 반환합니다.

int *ptr = calloc(10,sizeof (int));


물론 둘의 기능상 동일한 비교를 하려면 calloc vs malloc+memset 이라고 해야 맞을 것입니다.
malloc는 0으로 초기화를 수행하지 않으므로 굳이 calloc처럼 초기화를 원한다면 memset도 호출해야 할 것입니다. 


 1. calloc은 왜 두개의 인자를 받는 것일까?
calloc을 왜 설계했는지는 잘 모르겠지만 짧은 검색 실력을 바탕으로 보면 calloc은 두개의 인자를 받음으로써 overflow 여부를 확인할 수 있게 되었습니다. 모든 calloc의 구현에서 이 사실이 유효한지는 알 수 없지만, malloc에서 많이 사용하는 곱셈은 분명 size_t를 넘어서는 메모리 할당이 발생할 경우 잘못된 메모리를 할당받응ㄹ 수 밖에 없지만, calloc은 NULL을 return할 수 있습니다.
http://stackoverflow.com/questions/4083916/two-arguments-to-calloc

2. calloc 과 malloc+memset(..0..) 중 어떤 것이 빠를까?
이 부분에 대해서는 플랫폼마다 논쟁의 여지가 있을 듯 합니다만 일단 calloc이 더 빠를 가능성이 많아 보입니다. 어떤 플랫폼에서는 이미 운영체제가 0으로 초기화한 메모리 영역을 가지고 있을 수 있기 때문에 calloc시 그 영역을 바로 반환하는 것으로 처리될 수 있다고 합니다. 이런 경우 모든 메모리 영역을 0으로 초기화해야 하는 memset보다 단연 빠를 수 있습니다.
하지만, calloc과 malloc만을 비교한다면 malloc이 빠를 확률이 매우 높습니다. OS는 사용자가 malloc을 통해 메모리를 요청했다고 해서 반드시 실제 메모리를 잡아서 전달하는 것이 아닐 수 있습니다.(이 부분은 OOM과 관련하여 추가 정리가 필요할 듯 합니다.) 반면 calloc은 메모리를 잡고 초기화할 우려가 있습니다.
http://stackoverflow.com/questions/2688466/why-mallocmemset-slower-than-calloc
http://stackoverflow.com/questions/3449031/c-calloc-v-malloc

3. 어떤걸 쓰는게 좋을까?
대부분의 경우에는 malloc을 쓰는 것이 좋다고 합니다.
특히 주의해야 할 부분은 calloc이 하는 0으로 초기화란, 단순히 비트 클리어의 역활일 뿐이라는 점입니다.
float 배열을 calloc으로 할당한다고 해서 0.0이 되는 것이 아니라는 점입니다.
또, 메모리를 할당받는 이유가 무언가 쓰기 위함일텐데 대부분의 경우 다시 값을 덮어씌울 것이라면 초기화할 필요가 없습니다.
http://wiki.answers.com/Q/Is_it_better_to_use_malloc_or_calloc_to_allocate_memory

기타
http://stackoverflow.com/questions/1538420/c-difference-between-malloc-and-calloc

 


'프로그래밍 언어 > C/C++' 카테고리의 다른 글

GCC옵션: finstrument-functions  (0) 2011.05.24
linker 관련 링크  (0) 2011.04.15
calloc vs malloc  (7) 2011.04.06
[C언어] a - b < 0 vs. a < b  (0) 2010.10.25
C로 수행시간 체크하기  (0) 2010.09.30
__builtin_expect 키워드  (0) 2010.09.10
Posted by 소혼

댓글을 달아 주세요

  1. ^^ 2011.08.19 10:19 Address Modify/Delete Reply

    잘읽었습니다 :)

  2. 2011.09.18 14:16 Address Modify/Delete Reply

    비밀댓글입니다

    • 소혼 2011.09.22 21:23 신고 Address Modify/Delete

      답변 감사합니다.

      어디까지나 검색한 글을 발번역한거라 틀린 내용이 있을 수 있습니다.

      적어주신 말중에 calloc이 memset과 같은 역할을 해야 하기 때문이라고 하는 건 이해가 안가는데, 혹시 출처가 있는지 궁금합니다.

      malloc+memset과 calloc의 성능은 한번 측정해보겠습니다.
      일반적인 경우라면 둘의 성능은 비슷하거나, calloc이 빨라야(글에서 언급한것처럼 아주 특별한 경우) 정상일 것 같네요.

      역시나 이런 부분들이 궁금해서 검색한 글들을 정리해본 것입니다.

      덕분에 더 공부가 된 것 같습니다. 감사합니다.

  3. vbdream 2013.01.01 02:44 Address Modify/Delete Reply

    "float 배열을 calloc으로 할당한다고 해서 0.0이 되는 것이 아니라는 점입니다."는 잘못된 이야기입니다.

    IEEE 754 부동소수점 표기 방식에, float이든 double이든 모든 비트가 0인 경우는 0으로 정의되어있기 때문입니다.
    부동소수점에서 부호 비트가 가장 최상단에 있는 것, 그리고 모든 비트가 0일 때는 0인 것은 정수와의 호환을 염두해 둔 설계입니다.

    • vbdream 2013.01.01 02:50 Address Modify/Delete

      그리고 calloc이 설계된 원래 목적은 calloc이 무엇의 약어인지 알면 해결됩니다. calloc은 Contiguous Memory Allocation의 약어로, '연속 메모리 할당' 정도로 번역될 수 있습니다. 여기에서 말하는 연속 메모리(contiguous memory)는 배열을 의미합니다.

      malloc의 원래 목적은 구조체 따위를 위한 메모리 할당, calloc의 원래 목적은 배열을 위한 메모리 할당입니다.

    • 소혼 2013.01.04 21:25 신고 Address Modify/Delete

      답변 감사합니다.

      관련 내용을 좀 더 찾아봐야겠네요.

  4. Ww 2018.05.19 12:33 Address Modify/Delete Reply

    좋은 글 감사합니다.
    플랫폼마다 다른것인지는 모르겠지만 애플홈페이지에는 정반대로 적혀있어서 혼란스럽네요.
    https://developer.apple.com/library/content/documentation/Performance/Conceptual/ManagingMemory/Articles/MemoryAlloc.html
    calloc은 변수를 사용하기 시작할때 할당이 된다고 쓰여있네요.
    이건 malloc도 미찬가지일려나요...?
    calloc은 malloc+memset과 다르다는 의도인것 같습니다.
    memset을 최대한 skip하도록 되어있는것같네요.

이전글 : py2exe 설치 및 간단한 예제

파이썬에서 사용하는 PMW라는 위젯이 있습니다.
(이전 글 참고 : PMW 설치하기PMW 위젯을 사용하는 방법)
간단히 말해, PMW는 다양한 위젯셋을 제공하는 라이브러리입니다.

그런데 이 PMW를 포함해서 실행파일을 만들 때 다소 까다로운 부분이 있습니다.
사용한 hello.py는 다음과 같습니다.
 import Tkinter
from Pmw import *

root = Tkinter.Tk()
Pmw.initialise(root)

root.mainloop()


그냥 생성하면 마치 잘 생성된것처럼 보이지만 아래 그림처럼 에러가 발생합니다.
(앞의 예제 파일을 수정하여 진행하므로, h:\project\python\py2exe 폴더에서 그대로 작업합니다.)


이를 해결하기 위해서는 먼저 PMW를 bundlepmw.py 를 이용해 생성을 해주어야 합니다.
bundlepmw.py는 PMW를 설치한 폴더 밑 bin이라는 폴더 밑에 있습니다.
저의 경우, C:\Python27\Lib\Pmw\Pmw_1_3\bin 가 됩니다. (Python 2.7 에 PMW1.3 설치)

해당 경로에서 bundle을 생성하기 위해 아래와 같은 명령어를 입력하겠습니다.
python bundlepmw.py C:\Python27\Lib\Pmw\Pmw_1_3\lib

정상적으로 잘 되면 좋겠지만, 안타깝게도 전 아래와 같은 에러가 발생했습니다.

에러 메시지는 regsub가 없다는 것입니다.
regsub는 deprecated 된 것 같습니다.(http://www.python-forum.org/pythonforum/viewtopic.php?f=3&t=2537&p=57943)
해당 모듈을 re로 교체합니다.
#import regsub
import re
사용하는 부분들이 5군데 정도 있는데 모두 교체합니다.
저의 경우 regsub.gsubre.sub로 교체했습니다.

교체가 잘 이뤄진 후 다시 해당 파일을 실행하시면, 에러 없이 Pmw.py 파일이 생성됩니다.
이후 생성된 Pmw.py을 작업중이던 스크립트가 있는 곳(저의 경우 h:\project\python\py2exe) 에 복사합니다.
또한, Pmw의 lib 폴더(저의 경우 C:\Python27\Lib\Pmw\Pmw_1_3\lib)에서 PmwBlt.py, PmwColor.py를 복사해 같은 경로에 넣습니다.

즉파일이 아래와 같이 존재하게 됩니다.

이제 다시 py2exe 생성을 시도합니다.
python setup.py py2exe

정상적으로 생성되고 dist 폴더 아래에 생긴 hello.exe를 실행하면 아래와 같이 됩니다.

'프로그래밍 언어 > <Python>' 카테고리의 다른 글

[파이썬] 이미지 크기 변환 배치  (0) 2011.06.12
py2exe with PMW  (0) 2010.12.28
py2exe  (0) 2010.12.28
[python]XML 처리  (0) 2010.10.12
[파이썬] CSV2SQL ver 0.1  (0) 2010.08.27
[python] Windows에서 커맨드창 하나 더 띄우기  (0) 2010.08.24
Posted by 소혼

댓글을 달아 주세요

py2exe

프로그래밍 언어/ 2010. 12. 28. 20:28 |
py2exe는 파이썬 파일을 실행 파일로 만들어주는 모듈입니다.
이 글에서는 py2exe를 설치하고 간단한 예제를 돌려보겠습니다.

먼저 py2exe를 설치합니다.
http://sourceforge.net/projects/py2exe/files/py2exe/
에서 여러 버전의 py2exe를 설치할 수 있습니다.
이 글은 0.6.9 중에서도 python 2.7을 사용하겠습니다.
제가 사용한 파일명입니다.
py2exe-0.6.9.win32-py2.7.exe

다운로드 받으신 후 실행하시면 아래와 같이 Setup창이 뜹니다. python 경로를 바꾸지 않으셨다면 문제없이 Next만 눌러서 설치가 가능합니다.



설치가 완료되시면 간단한 python 예제를 만들어보겠습니다.(http://www.py2exe.org/index.cgi/Tutorial 을 따라하고 있습니다.)
hello.py
 print "Hello World!"

python hello.py를 실행하면 아래와 같습니다.

setup.py
 from distutils.core import setup
import py2exe

setup(console=['hello.py'])


python setup.py py2exe를 실행합니다.
아래와 같이 build, dist라는 폴더가 생깁니다.

dist 폴더 밑에 hello.exe를 실행하면 아래와 같습니다.


예제를 바꿔서 Tk로 작성한 Hello World (코드는 이전 예제 참조) 를 동일하게 생성해봤습니다.
별 무리 없이 나옵니다.

허접한 글이지만, 도움이 되셨다면 아래 손가락 꾹 눌러주세요.

'프로그래밍 언어 > <Python>' 카테고리의 다른 글

[파이썬] 이미지 크기 변환 배치  (0) 2011.06.12
py2exe with PMW  (0) 2010.12.28
py2exe  (0) 2010.12.28
[python]XML 처리  (0) 2010.10.12
[파이썬] CSV2SQL ver 0.1  (0) 2010.08.27
[python] Windows에서 커맨드창 하나 더 띄우기  (0) 2010.08.24
Posted by 소혼

댓글을 달아 주세요