머신러닝과 기술적 분석

실행중인 python module 의 path를 capture 하는 방법" 본문

python

실행중인 python module 의 path를 capture 하는 방법"

BetterToday 2017. 8. 16. 23:20
728x90

python programming 을 하다보면 file 의 상대경로를 capture 해야하는 경우가 있다.

1. 문제정의

문제를 조금 더 구체적으로 정의해보자.

[Project-Root]
        |----[main-package]
                   |----__init__.py             # empty file
                   |----module1.py
                   |----module2.py
                   |----[Template]
        |----driver1.py

module1.py 에서 Template 디렉토리에 있는 파일(text data 등)을 참조하는 상황을 가정해보자.

내 경우는 python 으로 c code 를 generation 할 떄 위와 같은 상황에서 Template 에 있는 c-code 를 읽어와야 하는 상황이 있었다.

이 떄 module1.py 에서 Template 의 상대경로를 참조하면 될까?

1) module1.py 에서 Template 의 상대경로를 참조해도되는 경우 : module1.py 를 main 으로 실행했으면 그래도 된다.

2) 다른 driver(e.g. : driver1.py) 에서 module1.py 를 import 해서 사용하는 경우라면 driver1.py 의 상대경로를 참조하게 되어 의도하지 않은 결과가 나온다.

2. module 에서 상대경로를 참조하는 방법

해결책은 매우 간단하다.

python module 에서 _file_ 로 접근하면 된다.
_file_ 를 통해 절대경로를 capture 하고 그것에 대한 상대적인 path 에 접근하면 된다.

예를 들어 module1.py 에서 아래와 같이 사용할 수 있다.

cur_dir = os.path.dirname(__file__) # 현재 디렉토리경로를 리턴
template_dir = cur_dir + "\Template"

3. 정리

  • __file__ : 현재 모듈의 (절대경로 + filename)를 리턴한다.
  • os.path.dirname(__file__) : 현재 모듈의 절대경로를 리턴한다.
728x90
반응형
Comments