Monday, May 30, 2011

package in python

프로그램 짜면서 package화를 잘 안시켜봤다.. 사실.. 내가 짜는 프로그램이라고 해봤자.. 조각난 script 정도라서.. 여튼 package의 개념이 좀 없었는데.. 이번 De bruijn graph package보면서 함 봐봤다. __init__.py의 파일의 개념이 좀 이해가 안갔는데 첨에볼때.. 어떤 책에서는 마치 import * 할 때 package안의 어떤 모듈들이 import 되는지에 대한 list를 명시 하는 것처럼 설명하기도 하고.. 그런데 어떤 package를 보면 아예 __all__ 이란 내장 변수는 없고 그냥 코드만 있기도 하다. 


<__init__.py>
이런 개념을 젤 잘 설명해주는 것이 여기. package도 모듈과 같이 사용될 수 있는데 그 걸 가능하게 해주는 파일이 __init__.py 


<setuptools>
그리고 setuptools 이용하는 방법 : 여기

<eggtestinfo>
아.. 그리고.. 하나 더 이것땜에 이게 뭔가 찾느라 고생 많이 햇는데.. 
전에 de bruijn graph 포스팅 한거에서 파일 받아서 보면 setup.py 에 test_suite이라는 인자(?)가 있는데 이는 아무리 뒤져봐도 setuptools 패키지 설명에서는 찾아볼수가 없었다. 이건 여기에 설명. 




<python egg>
아 이렇게 된 이상 python의 egg를 안 찾아 볼수가 없는데(항상 미뤄왔던 일..)
여기에 잘 나온다. 
요약하자면..
python egg는 리눅스의 rpm 같은 것으로(perl의 cpan에 더 가까워 보인다) easy_install 이라는 프로그램(easy_install은 setuptool package의 한 부분으로 setuptools는 distutils를 기반으로 한다)으로 쉽게 install이 가능케 한다. easy_install 라고 하면(easy_install 도 가능)  알아서 pypi에서 그 package가 있는지 검색해서 install 해준다(구글에서 검색하면 pypi에 어떻게 package를 등록하는지도 나온다). 또 좋은건 dependency 해결해 준단다. 
아.. classifiers 라는게 egg를 만든담에 pypi에 올렸을 때 제대로 된 카테고리에 올라가게 끔 하는거구나.. 
글구 pythonpaste에 대해서도 언급하는데 이건 다음에..