본문 바로가기
다시 개발자

python 상대 경로에 있는 함수 호출 방법

by 까삼스 이삐 2022. 12. 5.
728x90
반응형

python에서 상대 경로에 있는 함수를 호출하는 방법입니다. 편의상 파일구조는 다음과 같다고 할 때 호출하는 방법입니다.

C:\myPrj
              \util\aUtil.py
                                myFunction()
              \main\importTest.py

즉 main\importTest.py에서 util\aUtil.py에 있는 myFunction을 호출하는 방법입니다.

 

importTest.py에서 myFunction을 호출하기 위해서는 import를 해야 합니다.

이때 다음과 같이 하면 "ImportError: attempted relative import with no known parent package"라는 에러가 납니다.

from ..util.aUtil import *

 

만약 aUtil.py와 importTest.py가 같은 경로에 있는 경우 다음과 같이 import 하면 정상적으로 호출할 수 있습니다.

from aUtil import *

 

그리고 하위 경로에 있는 함수를 호출 할 때, 예를 들면 같은 경우의 구조에서 

C:\myPrj
              \util\aUtil.py
                                myFunction()
              \importTest.py

다음과 같이 import해도 정상적으로 호출할 수 있습니다.

from util.aUtil import *

or

from util import aUtil

 

하지만 상위 경로를 거쳐야 하는 경우 import error가 납니다.

 

해결 방법은 다음과 같이 경로를 시스템에 등록하는 것입니다.

import sys
sys.path.append(r'C:\myPrj\util')

import aUtil

하지만 경로는 시스템 환경에 따라 변경되기 때문에 유연성을 높이기 위해 다음과 같이 os package를 이용해서 경로를 가져오는 부분을 추가합니다.

 

import os
dir = os.path.realpath('..') + 'util'

import sys
sys.path.append(dir)

import aUtil

 

매우 무식한 방법인 것 같습니다. 하지만 현재까지 제가 찾은 상대 경로에 있는 함수를 호출하는 그나마 유연한 방법인 것 같아 공유합니다. 

 

아마도 package를 추가하는 방법이나 library를 추가하는 방법이 있을 것으로 생각됩니다. 하지만 간단하게 테스트 코드를 실행시키기 위해 예전에 구현했던 함수를 호출하기 위해 간단하게 사용할 수 있는 방법이기에 소개합니다.

 

더 좋은 방법을 알고 계시면 comment 남겨 주십시오.

 

--------------------------------------------------------------------

 

여기까지가 지난번에 작성한 글입니다.

 

오늘 더 좋은 방법을 발견해서 추가합니다.

 

C:\myPrj
              \util\aUtil.py
                                myFunction()
              \main\importTest.py

 

결론은 main위 directory부터 package로 잡는 것입니다. 즉 다음과 같이 호출하면 됩니다.

from myPrj.util import aUtil
or
import myPrj.util.aUtil as aUtil

aUtil.myFunction()

 

그럼 시스템에 append 안 해도 됩니다.

728x90
반응형

댓글