ImportError 수정: Python에서 이름을 가져올 수 없음

Salman Mehmood 2024년2월15일
  1. Python에서 ImportError: can import name 오류의 원인
  2. Python에서 ImportError: can import name 오류 수정
ImportError 수정: Python에서 이름을 가져올 수 없음

이 설명을 통해 ImportError: cannot import name 오류가 발생하는 이유를 알아봅니다. 또한 Python에서 이러한 종류의 오류를 수정하는 방법도 배웁니다.

Python에서 ImportError: can import name 오류의 원인

이 오류를 수정하는 몇 가지 방법을 사용할 수 있지만 이 오류를 수정하는 방법에 대해 알아보기 전에 이 오류가 발생하는 이유와 ImportError가 일반적으로 발생하는 경우를 이해해 보겠습니다.

Python의 ImportError는 코드 내의 import 문이 모듈을 성공적으로 가져오는 데 어려움이 있는 경우 발생합니다.

이러한 문제는 일반적으로 외부 라이브러리의 잘못된 설치 또는 가져오려는 모듈의 유효하지 않은 경로로 인해 발생합니다.

질문이 제기됩니다. ImportError: cannot import name (xyz)가 언제 발생합니까? 이러한 종류의 ImportError는 일반적으로 가져오려는 클래스가 순환 종속성에 있을 때 발생합니다.

그게 무슨 뜻이야? 순환 종속성이란 무엇입니까? 순환 종속성은 일반적으로 두 모듈이 서로 종속되도록 동시에 서로를 가져오려고 할 때 발생합니다.

이를 자세히 설명하려면 이 오류가 발생하는 방법과 시기를 이해하기 위한 예를 살펴봐야 합니다. demo1.pydemo2.py라는 두 개의 모듈이 있다고 가정해 보겠습니다.

import 문으로 이동하기 전에 이러한 모듈의 내용을 살펴본 다음 import 문을 살펴보겠습니다.

보시다시피 demo2 모듈에는 demo2_func1()demo2_func2()라는 두 가지 기능이 있습니다. 마찬가지로 demo1 모듈에는 demo1_func1()이라는 단일 함수가 있습니다.

보시다시피 demo2 모듈 내에서 demo1 모듈에서 demo1_func1을 가져옵니다. 마찬가지로 demo1 모듈 내에서 demo2 모듈의 일부인 demo2_func2()라는 함수를 가져오려고 합니다.

Python ImportError 이름 예를 가져올 수 없음을 가져올 수 없습니다.

demo2 모듈에 초점을 맞추겠습니다.

demo2_func1() 함수가 일부 문자열을 인쇄한 다음 demo1 모듈에서 가져온 demo1_func1() 함수를 로드하는 것을 볼 수 있습니다. demo1_func1()이 호출되면 일부 문자열을 인쇄합니다.

다음 줄에서 demo1_func1() 함수 내에서 demo2_func2() 메서드를 호출하므로 demo2_func2() 메서드도 demo1 모듈의 일부임을 알 수 있습니다. 이 두 모듈이 상호 의존적임을 알 수 있습니다.

이 경우 from demo1 import demo1_func1from demo2 import demo2_func2와 같은 문을 사용하면 순환 종속성이 발생합니다.

demo2 모듈을 실행하면 처음에는 demo2_func1()이 호출되고 demo1_func1() 함수로 이동하므로 예상되는 출력은 다음과 같아야 합니다. 실행 후 ImportError(cannot import name 'demo1_func1')가 표시됩니다.

ImportError: cannot import name 'demo1_func1' from partially initialized module 'demo1' (most likely
due to a circular import)

이는 주로 다른 모듈에서 한 모듈의 내용에 액세스하거나 그 반대로 액세스하려고 하기 때문에 발생합니다. demo2.py 모듈을 보면 demo1_func1이 초기화되기 전에 demo1에서 demo1_func1 함수를 가져오려고 합니다. 그 때 프로그램이 시작됩니다.

Python은 여전히 demo1 모듈의 내용을 초기화하고 있지만 demo1_func1 함수를 초기화할 충분한 시간을 Python에 제공하지 않습니다. 우리는 그것을 직접 호출하고 있기 때문에 이 ImportError가 발생했습니다.

Python에서 ImportError: can import name 오류 수정

이제 이 오류를 수정하는 방법을 살펴보겠습니다. 두 가지 방법으로 이 오류를 수정할 수 있지만 가장 쉬운 방법을 사용합니다. 순환 종속성을 피하기 위해 Python이 자체적으로 수행할 수 있습니다.

문제를 해결하려면 특정 코드를 변경해야 합니다.

import 문을 수정해야 하며 모듈의 내용을 가져오는 대신 두 파일 모두에서 전체 모듈을 가져옵니다.

demo1.py 파일의 소스 코드:

import demo2


def demo1_func1():
    print("demo1_func1")
    demo2.demo2_func2()

demo2.py 파일의 코드:

import demo1


def demo2_func1():
    print("demo2_func1")
    demo1.demo1_func1()


def demo2_func2():
    print("demo2_func2")


if __name__ == "__main__":
    demo2_func1()

출력:

demo2_func1
demo1_func1
demo2_func2

대부분 이 오류는 청사진 접근 방식을 사용하여 Flask 앱을 개발할 때 발생하므로 Flask 구조를 생성하는 경우 이 링크를 따라야 할 수 있습니다.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

관련 문장 - Python Error