본문 바로가기
Language/Python

__init__.py 역할 (import 할 시에 주의사항)

by 컴돈AI 2023. 12. 20.

목차

    import 할 시에 주의사항

    • 프로젝트를 진행하다보면 메인 프로젝트 폴더 안에서 여러 파일들과 폴더들이 있고, 또 그 안에 여러 파일들과 폴더들이 있을 수 있습니다.
    • 이럴 경우 다른 폴더에 있는 파일들의 함수를 가져올 때는 주의사항이 필요합니다.
      • 절대 경로 사용: 모듈을 import할 때는 프로젝트의 루트 디렉토리를 기준으로 하는 절대 경로를 사용하는 것이 좋습니다. 예를 들어, from 폴더명.파일명 import 함수명 형식을 사용합니다.
        • 또는 import 폴더명.파일명 하고 사용 시에 파일명.함수명() 이런 식으로 사용해도 됩니다.
      • 상대 경로 주의: 상대 경로를 사용하는 것(from .모듈 import 함수)은 가능하지만, 가급적 피하는 것이 좋습니다. 상대 경로는 현재 파일의 위치에 따라 달라질 수 있으며, 이로 인해 코드의 이동성과 가독성이 떨어질 수 있습니다.
        • 상대 경로를 사용하면 터미널에서 파일을 시작하는 경로에 따라서 달라질 수 있습니다.
      • 사이클 의존성 피하기: 서로 다른 폴더/모듈 간에 순환 의존성이 생기지 않도록 주의합니다. 예를 들어, 모듈 A가 모듈 B를 import하고, 동시에 모듈 B도 모듈 A를 import하는 경우, 이는 순환 의존성을 초래하고 에러를 일으킬 수 있습니다.
      • 패키지 초기화: import하려는 폴더에는 __init__.py 파일이 있어야 합니다. 이 파일은 해당 폴더가 패키지임을 나타냅니다.

    __init__.py 역할

    • __init__.py 파일에 패키지(폴더) 내의 다른 모듈을 미리 import 하여 패키지를 사용하는 코드에서 간편하게 접근할 수 있습니다.
    • 예를 들어 project라는 폴더가 있는데 그 안에 __init__.py 파일을 작성해 두면, 그 안에 있는 import 내용들을 project 폴더 밖에서 import project만 하면은 간단하게 사용할 수 있습니다.
    • 예시
      • 다음과 같이 폴더가 구성되어 있다고 가정하겠습니다.
        • a_code, b_code, c_code 안에는 a_func, b_func, c_func 함수가 있으며 각 함수는 다음과 같습니다.
      • 만약 여기서 import a만 하고 a_code, b_code, c_code 안에 있는 a_func, b_func, c_func 함수를 사용하려면 어떻게 해야 할까요? a폴더 안의 __init__.py 안에 작성된 내용에 따라 다르게 사용될 수 있습니다. 두 가지 예시를 통해 이해해 보도록 하겠습니다.
        • 각 폴더 안의 py 파일을 import 한경우
        • py 파일 안에 함수명을 import 한 경우
    • 예시를 통해 알 수 있듯이 __init__.py 안에 py파일이나 함수명을 직접경로를 지정해서 import를 해주게 되면, 나중에 폴더만 import 하고 손쉽게 __init__.py 안에서 import 했던 이름만 가지고 사용이 가능합니다.

     

    'Language > Python' 카테고리의 다른 글

    Python 메모리 관리 기법(Garbage Collection)  (0) 2024.03.31