문제의 역사: 패키지는 대규모 코드베이스를 구조화하고 코드 재사용을 위해 파이썬에 등장했습니다. 이는 프로젝트를 논리적 모듈로 나누고 필요한 기능의 유지 보수 및 임포트를 용이하게 합니다.
문제점: 패키지의 구조를 잘못 이해하면 임포트 오류, 이름 충돌 및 스크립트 실행 오류가 발생할 수 있습니다. 패키지와 모듈의 차이, 상대적 및 절대적 임포트 작업 규칙을 아는 것이 중요합니다.
해결책:
패키지는 __init__.py 파일(빈 파일 또는 초기화 코드가 있는 파일)이 있는 모든 디렉토리입니다. 패키지는 다른 패키지와 모듈을 포함할 수 있습니다. 구조의 예:
project/
├── mypackage/
│ ├── __init__.py
│ ├── mod1.py
│ └── subpackage/
│ ├── __init__.py
│ └── mod2.py
└── script.py
임포트를 위해 상대적 경로(from .subpackage import mod2) 또는 절대적 경로(from mypackage.subpackage import mod2)를 사용합니다. 대규모 프로젝트에서는 절대 경로가 더 선호됩니다.
주요 특징:
__init__.py의 존재로 정의됩니다.패키지로 만들고 싶은 각 폴더에 반드시 init.py가 있어야 하나요?
네, 파이썬 3.3 이하에서는 필수입니다; 현대 버전의 파이썬(3.3+)에는 "암시적" 네임스페이스 패키지가 있지만 완전한 호환성을 위해 파일을 권장합니다.
패키지 대신 모듈을 임포트하면 무엇이 발생합니까?
이 패키지의 __init__.py 코드만 실행됩니다.
“from . import mod1”과 “import mod1”의 차이는 무엇인가요?
from . import mod1 (상대적 임포트)는 패키지 내에서만 작동하며, 절대적 임포트는 sys.path에서 모듈을 찾기 때문에 이름 충돌이 발생할 수 있습니다.
__init__.py 파일의 부재 또는 중복부정적인 케이스: 상대적 임포트를 사용하지 않고 서로 다른 하위 폴더에 있는 동일한 이름의 모듈. 한 모듈에 잘못된 패키지가 접근합니다. 장점:
긍정적인 케이스:
명확한 절대 임포트 설정, 올바른 폴더 구조 및 __init__.py의 존재.
장점: