본문 바로가기
개발&코딩/Python

파이썬 Module Import 에러 해결법 관련

by 우동이 2023. 5. 31.
300x250

 


작업환경 : VS Code lastes version, Python 3.11.x

 

해당 에러는 패키지 내에 존재하지 않는 모듈을 임포트 해올때 발생합니다.

 

 

ImportError : attempted relative import with no known parent package

- 상대경로 임포트 에러 

ModuleNotFoundError: No module named

- 모듈 존재하지 않음

 

먼저 모듈과 패키지는 비슷해보이지만 다른 개념입니다.

 

모듈은 .py 단위의 필요한 정보를 담은 파일이고

패키지는 이 모듈들을 묶는 단위라고 보는게 무방합니다.

 

파이썬 구버전에서는 패키지 파일임을 인식하도록 __init__.py의 초기화 파일이 명시되었어야 하지만 

최신버전의 파이썬에서는 그렇지 않습니다.

 


1. 불러올 패키지 파일을 모듈 라이브러리에 추가

 

자신이 짜고 있는 코드의 환경이 단일된 환경

즉 옮겨다닐 필요성이 없는 경우에는 자신의 패키지 파일을 라이브러리로서 인식하게끔 해줄 수 있습니다.

 

import sys

print(sys.path)
$ python -m site

 

위 코드는 현재 라이브러리로 인식되고 있는 파일들의 경로를 출력합니다.

 

 

자신의 패키지를 라이브러리로 인식하게끔 하려면 아래 코드를 입력합니다.

 

import sys

sys.path.append("[path]")

#[path] = 패키지 인식 경로

 

이 경우 라이브러리가 추가되면 기본 설정을 벗어나는 것이므로 추천하지 않습니다.

 


2. 상대경로 및 절대경로 모듈 임포트

 

가장 좋은 방법은 자신이 다루고 있는 패키지 내에서 모듈을 임포트해오는 경우입니다.

ImportError의 경우에는 모듈을 불러오는 선언자가 잘못 명시되어 발생하는 경우가 대다수입니다.

 

package (패키지)안에 존재하는 b.py를 모듈로서 main.py에 임포트해오는 예제를 살펴보겠습니다.

 

# testpage/a.py

print("This is a")
# testpage/package/b

print("This is b")

 

a.py는 testpage 폴더내에 있고

b.py는 testpage의 package 파일 내에 있습니다.

각각 파일의 위치를 알릴 수 있는 print구문이 작성되어 있습니다.

 

 

# testpage/main.py

import a
import b

 

a,b 파일을 모듈로서 임포트 해옵니다.

 

 

이 경우 package 폴더 내에 있는 b.py 모듈을 찾을 수 없다는 에러가 발생합니다.

 

# testpage/main.py

import a
from package import b

 

b.py를 패키지내에서 임포트 해옵니다.

 

다음과 같은 결괏값이 출력됩니다.

즉 a,b 파일이 전부 정상적으로 임포트되었음을 확인할 수 있습니다.

 

만약 모듈 임포트 시 ImportError : attempted relative import with no known parent package

이와 같은 에러가 발생한다면

자신이 모듈을 불러올 때 상대경로를 이용해 작성했고 작성된 import 선언이 틀렸기 때문이라고 볼 수 있는데

 

위 예제에서 상대경로(.)를 활용해 모듈 b.py를 불러온다면 다음과 같이 작성되어야 합니다.

 

 

# testpage/main.py

from package.b import *
from package import b

import package.b

 

 

임포트 에러가 발생하는 경우는 이러한 상대경로가 잘못 작성되었을 경우

다음과 같습니다.

 

# testpage/main.py

from . import b

 

 

 

다른 글

 

이베이 셀러

 

드론 비행

 

ChatGPT 사용기

 

개인 서버 이용기

 

해킹

300x250

댓글