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 안 해도 됩니다.
'다시 개발자' 카테고리의 다른 글
centos, yum 명령어 실행시 repomd.xml Not Found error 처리 (0) | 2022.12.19 |
---|---|
fastapi 설치 (0) | 2022.12.06 |
Xcode "Unable to install OOO" (0) | 2022.11.01 |
Google Play Console 등록정보 수정 후 다시 심사 요청하기 (0) | 2022.10.28 |
[Android Studio] Invocation failed Unexpected end of file from server 에러 (0) | 2022.08.29 |
댓글