반응형
파이썬 코딩시, 내가 만들 모듈을 불러 들여서 사용하고자 할 때, relative 참조를 사용하다가 보면 다음과 같은 메시지를 접하는 경우가 있다.
Importerror: attempted relative import with no known parent package
몇 시간의 검색과 사색? 끝에.. 파이썬에서 상대참조는 현재 프로젝트의 디렉토리에 한해서 유용하다. 즉, 현재 작업하는 프로젝트 디렉토리보다 상위의 디렉토리를 참조하는 것은 불가능.
그럼 내가 만든 A라는 패키지를 완전 다른 B라는 디렉토리에서 참조하고 싶으면 어떻게 하느냐?
1. 절대참조를 쓴다. 근데 귀찮음.
2. 내가사용할 A라는 패키지를 임시로 환경변수에 등록해서 사용한다. 다음과 같다.
<상황>
project\ #프로젝트 B보다 상위 폴더이므로 파이썬 내부에서 'import ..'의 방법으로 접근 불가
project\A #사용하고 싶은 패키지
project\A\pack1 #서브디렉토리
project\A\pack1\test.py #불러올 모듈
project\B #현재 프로젝트
import os, sys
#A 패키지가 B의 한단계 상위폴더에 위치한 경우.
#상위 폴더의 경로명을 받아옴("c:\...\project+")
p = os.path.abspath('..')
#사용할 패키지의 폴더명을 덧붙임
p = p + r'\A'
#사용할 패키지의 폴더명을 임시로 환경변수에 추가함
sys.path.insert(1, p)
#
from pack1 import test
코드를 보면 감이 오시죠? 다른 경우도 적절히 사용하면 된다. 주의할 점은, from "패키지명" 에서 불어올 패키지명이 이미 설치되어 있다면, 설치되어 있는 패키지 또는 모듈명이 우선순위를 가진다. 따라서 설치되어 있는 패키지/모듈과 다른 이름으로 설정할 것!
휴.. 힘들게 해결해서.. 기록해 둔다.. 검색해도 잘 없다.. ㅠ..ㅠ
반응형