모듈과 패키지의 관계
모듈은 하나의 .py 파일들 / 혹은 파일 내 클래스, 함수, 변수 등을 지칭함
파이썬 모듈은 다음과 같이 사용함
# random 내장 라이브러리 모듈 import
import random
# random 모듈의 shuffle() 함수 import
from random import random_shuffle
# random 모듈의 shuffle() 함수 import
import random.random_shuffle
패키지는 모듈(혹은 패키지)을 포함하는 디렉토리(directory)를 지칭함
# Ipython 폴더의 display 폴더의 Image 라는 모듈을 import
from IPython.display import Image
폴더 구조의 __init__.py
__init__.py 란 다음 두가지 역할을 수행한다.
- 폴더(디렉터리)가 패키지로 인식되도록(패키지로 인식되어야 하위 모듈 접근 가능) 하는 역할
- 이름 그대로 패키지를 초기화하는 역할
- 패키지가 로드 될 때 수행되어야 하는 로직이 있다면 작성 가능
ex) import 된 package1 을 출력해보면 __init__.py를 출력하는 것을 알 수 있다.
# 디렉터리의 __init__.py 없을 때
import package1
print(package1)
# <module 'package1' from '/Users/ive_smkim/PycharmProjects/smkim/test/package1/__init__.py'>
print(dir(package1))
# ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
editor 에서 참조 못함 에러
editor의 특정 폴더를 기준으로 파일을 열어보자.
실행되는 파이썬 인터프리터의 위치를 기준으로 에디터들은 폴더구조를 이해한다.
__all__ 이란
특정 패키지의 모든 모듈을 * 로 이용하여 import 하는 경우, 패키지 작성자에 한해 공개 범위를 한정 할 수 있음 -> __all__
__init__.py 파일에 __all__ 이라는 변수를 설정하여 import 할 수 있는 모듈 정의 가능
즉 __all__을 사용하면 패키지나 모듈에 대해 import * 선언시 import를 허용할 모듈에 대해 범위를 제어 하는 것
'Python > Advanced' 카테고리의 다른 글
[최적화] Python 인터닝(Interning) 기법 (0) | 2024.08.03 |
---|---|
Python 코드 실행 과정 (0) | 2024.07.31 |
[Python] Class 이해 - 언더바 정의, @property, @staticmethod, setter/getter (0) | 2023.07.02 |
[Python] Circular Import에 따른 파일 구조 개선 (0) | 2023.05.29 |
[Python] 가상환경, 패키지 관리 모듈 정리 (pyenv, pipenv, poetry, venv) (0) | 2023.02.11 |