요새는 파이썬을 만지고 있습니다.
초짜이다 보니 삽질하면서 적응해가고 있는데 내가 만든 모듈을 불러들여야 하는데 안불러지는 경우가 발생했습니다.
대략 다음과 같은 폴더 구조입니다.
aa.py 에서 bb.py 가 필요한데..
from dirB import bb.py 하니까 없는 모듈이라고 뜹니다..
찾아보니 파이썬의 from, import 는 현재 위치 기준 상대경로로 인식된다고 합니다.
그래서 sys.path 에 절대경로 값을 추가해 준 다음 import 를 해야 하는 상황입니다.
답만 나열하자면 aa.py 에서 bb.py 가 필요한 시점에 다음과 같이 작성했습니다.
import os, sys
# 프로젝트 root\dirB를 import 참조 경로에 추가
sys.path.append(
os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'dirB'))
import bb
이렇게 해서 동작합니다. 다만, vscode 에서 ip 가 unresolved 되었다고 경고를 내보내서 다음과 같이 수정했더니 경고 없이 깔끔히 동작합니다.
import os, sys
# 프로젝트 root를 import 참조 경로에 추가
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
from dirB import bb
별거 없습니다. __file__ 은 파일이름 포함 절대 경로입니다. 예를 들면 c:\project\dirA\subdirAA\aa.py 와 같은 형태입니다.
여기서 dirname()을 처음 쓰면 aa.py 가 날라가고 두번째 쓰면 subdirAA가 날라가고 세번째 쓰면 dirA가 날라갑니다. 여기에 join으로 dirB 를 붙여주어 sys.path에 append한 다음 bb 를 import 하던가 join은 빼고 최상위 경로까지만 sys.path에 append 해주고 from dirB import bb 로 사용할 수 있습니다.
좀 귀찮지만 또 사용할 경우가 있을 것 같아서 정리합니다.
'IT > python' 카테고리의 다른 글
[python] os 종류 확인하기 (0) | 2020.08.11 |
---|---|
[python] 설치된 패키지 확인 (0) | 2020.07.29 |
[python][ubus] 간단히 ubus 보내고 받는 예제 (0) | 2020.07.02 |
[python][ubus] failed to connect to the "ubus" socket var/run/ubus.sock (0) | 2020.07.02 |
VSCode 상에서 이미 설치된 모듈을 찾을 수 없다고 할 때 해결 방법 (2) | 2020.06.04 |