관리 메뉴

보리차

[파이썬] 패키지 본문

파이썬

[파이썬] 패키지

보리콩 2021. 5. 27. 21:21

키지 

모듈을 기능별로 묶어 둔 것이다. 프로그램의 구성 요소를 잘 정리할 수 있고 쉽게 재활용 할 수 있다.

 

패키지는 모듈들을 모아 놓은 디렉토리를 말한다. 예를 들어 평면도형의 면적을 구하는 area 모듈과 입체도형의 부피를 구하는 volume 모듈을 모아서 shapes 라는 패키지를 만들어보자. shapes 패키지의 구조는 아래와 같다.

 

 

패키지는 일반 디렉토리와 똑같지만 안에 __init__.py 라는 파일이 있다. 이 파일은 이전 버젼에서는 필수였지만 지금은 필수가 아닌데 호환성을 위해서 꼭 만들어 주는 것이 좋다.

 

 

 

 

패키지 임포트

패키지 안에 있는 내용을 가져올 때도 import 키워드를 사용한다.

 

import <package.module>

run.py

import shapes.volume
print(shapes.volume.cube(3))

 

이렇게 패키지 안에 있는 모듈을 가져올 수 있다. 패키지나 모듈 안에 있는 것은 항상 .을 이용해서 접근한다.(경로에서 \나 / 같은 역할인듯)

 

 

import <package>

run.py

import shapes
print(shapes.volume.cube(3)) # 오류

 

이렇게 패키지 자체를 임포트하면 패키지 안에 있는 내용들은 임포트되지 않고 오류가 생긴다. ( 패키지 안에 있는 모듈도 임포트 하려면 init파일을 활용해야 한다. )

 

 

 

from ... import ... 방식도 패키지에 쓸 수 있다. 패키지 안의 모듈을 바로 가져올 수도 있고 모듈 안에 있는 변수나 함수를 가져올 수도 있다.

from <package> import <module(s)

run.py

from shapes import volume
print(volume.cube(3))

 

 

from <package.module> import <member(s)>

run.py

from shapes.volume import cube
print(cube(3))

 

마찬가지로 as키워드를 써서 임포트 하는 것의 이름을 바꿔줄 수 있다.

 

import shapes.volume as vol
print(vol.cube(3))

 

 

 

 

(주의) import ... 방식을 써서 모듈의 함수나 변수를 바로 가져올 수 없다.

run.py

import shapes.volume.cube # 오류

 

 

+)패키지 안에 패키지를 만들 수도 있다. 이를 서브패키지라고 한다. 서브패키지도 같은 임포트 방식을 사용하면 된다.

 

임포트 총정리

import ... 

run.py 

# 패키지 임포트
import mymath

# 서브패키지 임포트
import mymath.shapes

# 모듈 임포트
import mymath.shapes.area

# 모듈 안에 있는 변수나 함수는 이 방식으로 임포트 할 수 없음 
import mymath.shapes.area.circle # 오류

 

from ... import ... 

run.py

# 패키지 안에 있는 패키지 임포트
from mymath import shapes

# 패키지 안에 있는 모듈 임포트
from mymath.shapes import area

# 모듈 안에 있는 함수 임포트
from mymath.shapes.area import circle

# import 뒤에는 . 을 쓸 수 없음 
from mymath import shapes.area # 오류

import 뒤에는 모듈이나 패키지 안에서 가져오고 싶은 걸 써주는 데 이때 import 뒤에는 . 을 쓸 수 없다.

'파이썬' 카테고리의 다른 글

[파이썬] __all__ 특수 변수  (0) 2021.06.03
[파이썬] __init__  (0) 2021.06.03
[파이썬] 스크립트와 모듈  (0) 2021.05.24
[파이썬] 모듈 검색 경로  (0) 2021.05.24
[파이썬] 네임스페이스(namespace)  (0) 2021.05.24