Python script 파일을 만들어서 실행을 하다보면,
script 파일이 지금 현재 어느 경로에 위치하고 있는지 알고 싶은 경우가 있다.

이럴 때 사용할 수 있는 좋은 예약어가 하나 있다.

__file__


현재 실행 중인 스크립트 파일 이름을 의미한다.
단순한 파일 이름이 아니라 실행할 때 사용한 경로를 포함한 파일 이름이다.

테스트를 위해서 [ dir.py ]라는 이름의 Python script 파일을 다음 내용으로 생성해보자.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import os

if __name__ == "__main__":

        print "__file__                                                       = " + __file__
        print "os.path.dirname(__file__)                              = " + os.path.dirname(__file__)
        print "os.path.realpath(__file__)                              = " + os.path.realpath(__file__)
        print "os.path.realpath( os.path.dirname(__file__) )   = " + os.path.realpath( os.path.dirname(__file__) )
        print
        print "os.getcwd()                                                 = " + os.getcwd()
        print
        print "os.path.basename( os.path.realpath(__file__) ) = " + os.path.basename(__file__)


실행을 해보면 다음과 같다.

$ pwd
/srv/workspace/barerepo

$ python ./dir.py
__file__                                                       = ./dir.py
os.path.dirname(__file__)                              = .
os.path.realpath(__file__)                              = /srv/workspace/barerepo/dir.py
os.path.realpath( os.path.dirname(__file__) )   = /srv/workspace/barerepo

os.getcwd()                                                 = /srv/workspace/barerepo

os.path.basename( os.path.realpath(__file__) ) = dir.py


dirname 은 상대경로를 알려주고 realpath 는 절대경로를 알려준다.
 
[ __file__ ] 예약어를 통해서 현재 경로를 확인하는 것에 대해서 살펴보고 있지만,
사실 지금 현재 경로를 알고 싶을 때에는 [ os.getcwd() ] 명령이 훨씬 더 많이 사용된다.

경로에서 파일이름만 뽑아내고 싶을 때에는 [ os.path.basename() ] 명령을 사용하면 된다.

반응형

Linux 환경에서 build (compile) 시간을 짧게하기 위한 방법을 찾아보면 꼭 나오는 방법이 있다.
바로 ccachedistcc 다!

여기에서는 ccache에 대해서 알아보겠다.

원리는 비교적 간단하다.
처음에 빌드를 할 때에 정보와 함께 그 결과물을 저장하고 있다가,
다음 번 빌드를 할 때엔 정보를 비교해서 같은 파일의 빌드를 한다면 저장하고 있는 결과물을 활용하는 것이다.
그렇게 함으로써 두 번째 빌드부터는 변경된 부분만 빌드를 수행하므로 소요시간이 짧아지는 것이다.




1. 공식 사이트

     - http://ccache.samba.org/
     - License : GPL3

     - 기본적으로 gcc 컴파일에 적용을 할 수 있으며, Cross-compiler (Tool-chain)에도 적용할 수 있다.

     - 안전성에 대해서는 나름 자부를 하고 있는 상당히 오래된 프로젝트이며,
       구글의 안드로이드에서도 공식적으로 옵션으로 적용을 하고 있다.




2. Install

     - Ubuntu에서는 편하게 패키지로 제공을 해준다.


$ sudo apt-get install ccache

     - 이걸로 끝이다. 간단하지 않은가 ?!




3. PATH

     - ccache를 활용하기 위해서는 PATH 설정만 해주면 된다.


$ sudo nano /etc/environment

PATH="/usr/lib/ccache:......."

     - 환경파일에서 PATH 값에서 제일 앞에 "/usr/lib/ccache:" 경로를 추가해주면 된다.
     - 일단은 이러면 끝이다.




4. Environment

     - 그러면 대체 왜 "/usr/lib/ccache" 디렉토리를 경로에 추가를 해줘야할까?


$ cd /usr/lib/ccache

     - 검색해서 자료들을 보면 "export CC='ccache cc'"등을 설정하기도 하고,
       Makefile을 수정하기도 하는 등 다른 방식으로 처리하기도 하지만...
     - 최근엔 그냥 '/usr/lib/ccache' 디렉토리를 이용하면 모든 것이 끝이다.

     - Compiler를 모두 ccache로 대체하면 되는 것이다.

     - 만약 Cross-compiler (Tool-chain)을 사용하는 경우라면 위 디렉토리에 링크를 만들어주면 된다.

$ cd /usr/lib/ccache
$ sudo ln -s ../../bin/ccache powerpc-tuxbox-linux-gnu-cc
$ sudo ln -s ../../bin/ccache powerpc-tuxbox-linux-gnu-c++
$ sudo ln -s ../../bin/ccache powerpc-tuxbox-linux-gnu-gcc
$ sudo ln -s ../../bin/ccache powerpc-tuxbox-linux-gnu-g++






5. cache dir

     - ccache를 적용하면 빌드 결과물을 어딘가에 저장해놓는다고 했는데, 어디에 위치할까?


$ ccache -s

     - 상태(status)를 확인하고 싶을 때 사용할 수 있는 명령이다.

     - 기본적으로는 홈 밑의 ".ccache" 디렉토리에 위치하며, 기본 용량제한은 1GB이다.





6. clear

     - 빌드 결과가 왠지 이상하다거나 cache 데이터를 지우고 싶을 때엔 다음 명령으로 처리할 수 있다.


$ ccache -C




몇 가지 더 옵션들이 있지만, 알고 싶으면 공식 사이트를 참조하기 바란다.
실제로 적용해보면 탁월하게 효과가 있다~!!!

반응형

+ Recent posts