Python/Advanced

[Python] 모듈과 패키지

yubi5050 2024. 6. 22. 17:07

모듈과 패키지의 관계

모듈은 하나의 .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

https://wikidocs.net/138246

 

 

폴더 구조의 __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를 허용할 모듈에 대해 범위를 제어 하는 것