[PYTHON] Module & Packages

Minjeong Bak·2021년 10월 14일
0

PYTHON/Django

목록 보기
7/14
post-thumbnail

Module

모듈: 파이썬에서 변수나 함수, 클래스 등을 모아놓은 파일

사용 이유

  • 다른 파일애서 재사용 가능
  • 코드가 많아 파일이 커졌을 때 여러 파일로 나누어 정리하기 위해

Module 생성

  • 파일 생성 후 그 안에 재사용하고 싶은 함수나 클래스, 변수 등을 구현함
## my_module.py
my_module_var = 7

def my_module_func():
    return "Hello!"

class MyModuleClass:
    pass
  • 모듈 불러오기
    - 모듈을 import할 때 파일 확장자인 .py는 제외하고 파일이름만 사용해서 import해야 함
import <모듈 이름>

import my_module
  • import한 후에 모듈의 원하는 변수, 함수, 클래스 사용
<모듈 이름>.<모듈에서 사용하길 원하는 변수/함수/클래스 이름>

#함수 호출
my_module.my_module_func()
  • 모듈 이름을 붙여야 하는 이유 -> 어느 파일의 해당되는 부분인지 알 수 있기 때문
    : namespace
    - 이름의 공간 혹은 영역을 알려준다.
## main.py
import my_module

print(my_module.my_module_var)

my_module.my_module_func()

my_module_class = my_module.MyModuleClass()

from ~ import ~

from ~ import ~ 키워드를 사용하여 모듈을 불러들이는 경우 모듈 이름을 붙이지 않고 원하는 함수나 변수, 클래스를 호출할 수 있음

from <모듈 이름> import <함수/변수/클래스1>, <함수/변수/클래스2>, ..., <함수/변수/클래스N>
  • my_module 모듈에서 my_module_func 함수와 my_module_var 변수를 import
from my_module import my_module_func, my_module_var

print(my_module_var)
my_module_func()
  • * 사용 -> 모든 요소 불러옴
from my_module import *

print(my_module_var)
my_module_func()

Import As

  • 여러 모듈을 import 하게 되면 이름 충돌이 날 수 있음
  • 동일한 이름의 함수, 모듈 요소의 이름이 너무 길 경우에 import as 키워드를 사용해서 새로운 이름을 주어 사용한다.
from my_module  import my_func as f1
from my_module2 import my_func as f2
from my_module3 import function_with_name_too_long as f3

f1()
f2()
f3()
  • module이름도 as를 사용하여 새로운 이름을 줄 수 있다.
import my_module as m1

m1.my_module_func()

Packages

  • 파일을 불러온다는 점에서 모듈과 같으나 패키지는 모듈보다 더 크고 복잡한 코드
  • 모듈의 코드 양이 너무 커 한 파일에 다넣기 비효율적일때 여러 파일에 나누어서 코드를 관리하기 위함
  • 여러 파일에 나누어져 있는 코드들을 하나의 모듈로 불러와서 사용할 수 있도록 해주는 것
  • 파이썬 파일들로 이루어져 있는 디렉토리가 하나의 패키지가 됨(directory name = package)
  • 클래스 객체를 사용할때 처럼 "dot notation" 으로 해당 package의 원하는 모듈을 import
import pkg.mod1
from pkg.mod2 import func2

pkg.mod1.func2()
func2()

Package Initialization

  • package가 import 될때 초기 설정을 해줘야하는 경우
  • __init__.py 파일을 통해 package 초기 설정

  • Package 안에 __init__.py 파일이 있으면 package가 import 될때 __init__.py 파일의 코드들이 자동으로 실행된다.

__init__.py 파일(언더바 두 개)

  • Import 할때 경로의 총 길이 줄여주기
  • Package에서 import 할 수 있는 변수/함수/클래스 제한하기
  • 그 외 package가 import될때 꼭 먼저 실행되어야 하는 코드들
  • import 할때 경로의 총 길이 줄여주기
# pkg에서 mod1의 func2 라는 함수를 import 하여 사용하기 위해
import pkg.mod1

pkg.mod1.func2()

# __init__.py 파일을 통해 함수의 경로를 줄여주기
# __init__.py 파일에 먼저 한번 import

# __init__.py
from .mod1 import func2
# main.py
from pkg import func2

func2()

__all__ 변수

  • 내부적으로만 사용되어야 하는 함수가 package 외부에서 import되어 사용되는 것을 막기 위해서는 __all__ 변수를 지정
  • package를 통해 import 될 수 있는 요소들은 모두 __all__ 변수를 통해 정의
  • __all__ 변수의 default 값은 모든 함수/변수/클래스, 그러므로 __all__ 변수를 따로 정의해줌으로 import 될 수 있는 요소들을 제한할 수 있는 것
  • __all__ 변수는 string 값의 요소를 가지고 있는 list(list of strings), import 되길 원하는 요소들을 string으로 list에 선언
# __init__.py
from .mod1 import func2
from .mod2 import func3

__all__ = ['func2', 'func3']

# main.py
from pkg import *

func2()
func3()
func4() ## <== Error. func4 함수는 __all__ 에 정의되지 않았으므로 import 될 수 없음.

타인 package 사용

pip

  • 파이썬의 package manager
  • 터미널에서 다음 명령어 사용
pip install Django 

0개의 댓글