[Python] Pacakge에서 모듈간 import 에러 __init__.py 순서 기술 이야기 2020. 11. 8. 12:42

파이썬에서 다른 모듈 import가 안된다고 에러가 났다. 철자까지 몇번을 확인하고 다른 곳에서 import해봐도 잘되는데 뭐가 문제일까 30분을 디버깅했다. 같은 패지키내에 모듈을 로딩할 때는 __init__.py에서의 순서가 중요하더라.

파이썬 강좌나 책은 공개된 것은 많은데, 이렇게 중요한 내용은 언급을 안함ㅠ 디버깅으로 체득함.

smtm 제작중

sample code

추상 클래스로 인터페이스를 만들고, 구현체를 따로 만들었다. 둘은 서로 다른 파일에 구현되었다.

# /simulator/data_provider.py
from abc import *

class DataProvider(metaclass=ABCMeta):
    @abstractmethod
    def initialize(self):
        pass

같은 패키지의 DataProvider import를 못한다.

# /simulator/live_data_provider.py
from . import DataProvider
class LiveDataProvider(DataProvider):
    def initialize(self):
        return "test"

import error

아래와 같이 되어 있는 경우 import가 안된다.

# /simulator/__init__.py
from simulator.live_data_provider import LiveDataProvider
from simulator.data_provider import DataProvider

import success

순서를 바꿔주니 잘 되었다.

# /simulator/__init__.py
from simulator.data_provider import DataProvider
from simulator.live_data_provider import LiveDataProvider

댓글