머릿말

doxygen을 사용하면, 프로젝트의 전반적인 내용을 파악할 수 있는 document가 자동 생성된다.

doxygen을 오랜만에 사용해보고, 게다가 c/c++ 프로젝트가 아닌 python project에 사용해보는건 처음이라 그 과정을 적어본다.

전체 과정은 https://www.stack.nl/~dimitri/doxygen/manual/starting.html 이곳을 참조했다


독시젠 설치

먼저 doxygen을 설치하자, 


CentOS면 sudo yum install doxygen

Ubuntu면 sudo apt-get install doxygen

macOS면 brew install doxygen

이런식으로 간단하게 설치가 가능하다.


독시젠 configuration

독세젠을 돌리려면 먼저 configuration file을 만들어야 한다.


doxygen -g 라고 하면 Doxyfile 이라는 configuration 파일이 만들어진다. (에디터로 열어서 수정 가능하다)


주의할점: Doxyfile을 열어서 EXTRACT_ALL = NO를 YES로 변경해야 결과가 제대로 나온다.

(If the EXTRACT_ALL option is set to NO in the configuration file (the default), then doxygen will only generate documentation for documentedentities.)


독시젠 돌리기

간단하게

doxygen 이라고만 하면 자동으로 결과가 생성된다.


독시젠 생성 결과물 보기

html/index.html을 열어보면 결과를 확인할 수 있다.


여기까지만 해도 좋지만, graphviz를 설치하여 call graph를 추가하고, 여러가지 추가 옵션을 줘보자.


결과에 call graph 추가




위와 같은 call graph를 결과물에 포함시키기 위해서는, 먼저 graphviz라는 툴을 설치해야한다.

macOS의 경우 brew install graphviz로 설치 가능하다.


그다음 Doxyfile을 다시 열어서 아래 내용을 수정해준다.


-그래프 설정
CALL_GRAPH             = YES
CALLER_GRAPH           = YES


- Graphviz 바이너리 위치 설정
DOT_PATH               = /usr/bin/graphml2gv
HAVE_DOT               = YES

(위 graphml2gv 경로설정은 which graphml2gv 명령어를 통해서 확인한 다음에 넣으면 된다.)

- 클래스 상속 구조 포함
CLASS_DIAGRAMS          = YES

- 그래프를 text가 아니라 그래픽 버전으로 보여줌
GRAPHICAL_HIERARCHY     = YES 


- 대상 폴더의 하위 폴더도 대상으로 지정
RECURSIVE              = YES

- 생성되는 doc 파일이 많아지므로 하위폴더 생성
CREATE_SUBDIRS         = YES

- 문서에 구현 소스도 포함
INLINE_SOURCES         = YES

- 문서에 소스파일 추가 (Files에서 조회 가능)
SOURCE_BROWSER         = YES


(위 내용은 http://heavensbus.blogspot.kr/2014/07/doxygen-call-caller.html 이곳을 참조했습니다.)


반응형

'Programming > Python' 카테고리의 다른 글

Anaconda & Jupyter  (0) 2018.03.23
python numpy  (0) 2018.02.28
python virtualenv 가상환경  (0) 2017.11.16
python import  (0) 2017.11.14
python 시간관련 함수  (0) 2017.10.31


현재 위치가 ./ 이고 내가 정의한 클래스의 위치가 ./home/test.py에 있다고 해보자.

그리고 그 클래스의 이름이 다음과 같이 Foo로 정의되어 있다고 하자.

1
2
3
class Foo(object):
 
    pass

이때 ./위치에서 이 클래스를 가져다 쓰려면 다음과 같이 여러가지 방법이 있다.

(python2.x의 경우 주의할 점은 home 폴더 안에 __init__.py 파일이 dummy로 라도 생성되어 있어야 한다.)

방법1

1
2
3
import home.test
 
f = home.test.Foo()

 

방법2

1
2
3
from home.test import Foo
 
f = Foo()

 

방법3

1
2
3
from home import test
 
f = test.Foo()

 

방법4

1
2
3
import home.test as t
 
f = t.Foo()

 

 

일반적으로는 방법2가 가장 편리하다. 단 Foo말고 다른 것도 많을 경우 하나씩 지정해주기가 힘들다. 이때는 import Foo 대신 import *를 해주는 방법이 있다.


방법4도 편할 수 있다. 단 import를 import home.test.Foo as F 처럼 class단위까지 바로 할 수는 없다.



반응형

'Programming > Python' 카테고리의 다른 글

Anaconda & Jupyter  (0) 2018.03.23
python numpy  (0) 2018.02.28
python virtualenv 가상환경  (0) 2017.11.16
python에서 doxygen 사용해보기  (0) 2017.11.14
python 시간관련 함수  (0) 2017.10.31

현재 시간 얻어오기

from datetime import datetime
now = datetime.now()
print(now)  # 2017-10-31 13:20:54.339081
type(now)  # <type 'datetime.datetime'>


시간의 년도/월/일 등 각 항목을 얻어올때는 timetuple() 사용

from datetime import datetime
now = datetime.now()
now_tuple = now.timetuple()
now_tuple.tm_year  # 2017


타임존 변환

뉴욕시간을 서울시간으로변경(서머타임, day-light saving 자동으로 고려됨)

from datetime import datetime
from pytz import timezone

 # 뉴욕시간으로 오전 9시 30분 입력 
ny_dt = timezone('America/New_York').localize(datetime(2017, 10, 23, 9, 30, 0)) 
ny_dt  # 2017-10-23 09:30:00-04:00 

# 서울시각으로 변경
kr_dt = ny_dt.astimezone(timezone('Asia/Seoul'))
kr_dt  # 2017-10-23 22:30:00+09:00 


스트링을 datetime으로 형변환 하기

format은 여기 참조

from datetime import datetime
s = '2020-08-01T03:55:15+09:00'
dt = datetime.strptime(s, '%Y-%m-%dT%H:%M:%S%z')
dt  # datetime.datetime(2020, 8, 1, 3, 55, 15, tzinfo=datetime.timezone(datetime.timedelta(seconds=32400)))

시간연산하기

현재시간(now)과의 차이를 구하기(KST timezone 고려)

from datetime import datetime, timezone, timedelta
KST = timezone(timedelta(hours=9))
n = datetime.now(KST)
(n-c).seconds  # days, hours등도 가능



반응형

'Programming > Python' 카테고리의 다른 글

Anaconda & Jupyter  (0) 2018.03.23
python numpy  (0) 2018.02.28
python virtualenv 가상환경  (0) 2017.11.16
python에서 doxygen 사용해보기  (0) 2017.11.14
python import  (0) 2017.11.14

+ Recent posts