module

Nam Eun-Ji·2020년 11월 26일
0
  • 코드의 재사용성
  • 필요한 로직만을 로드해서 메모리의 낭비를 줄임



import

  • import 모듈이름
  • 모듈이름.사용할 변수 혹은 함수
import my_module    # .py는 생략
my_module.func1()


from import

  • from 모듈이름 import 사용할 변수/함수/클래스
  • from import를 사용했을 때 변수/함수/클래스 사용 시 모듈이름 명시해주지 않아도 됨
  • * (별표) 사용하면 모든 요소 사용가능
from my_module import func1, func2, variable   # 쉼표로 구분 
func1()
from my_module import *
func1()


import as

  • 여러 모듈을 import할 경우 이름 충돌로 에러가 날 수 있으며, 함수의 네임이 너무 길어서 사용시마다 다 적어줘야한다는 불편함이 있어 as키워드를 적어 대신 짧게 적용할 수 있다.
  • from 모듈네임 import 사용할 변수/함수/클래스 as 네임
from my_module  import my_func as f1
f1()


package

  • 많은 양의 모듈을 나눠 여러개의 파일로 나눠 package라는 directory에 보관
  • dot notation으로 모듈파일을 불러옴
from pkg.my_module import func1
func1()
  • package 안에 __init__.py파일이 있을 경우 해당 파일을 우선 처리함
  1. import할 때 경로의 길이를 줄여줌
import pkg.mod1
pkg.mod1.func2()
# 위처럼 매번 모듈을 import해야하는 번거로움이 있음

# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
# __init__.py
from mod1 import func2
  1. package에서 사용할 수 있는 함수/클래스/변수 제한 가능
# __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 될 수 없음


search module/package

파이썬은 아래와 같은 순서로 module/package를 찾는다.
sys.path에서도 못 찾으면 ModuleNotFoundError를 리턴
sys.modules → built-in modules → sys.path

1. sys.modules
이미 import된 module과 package를 모아놓은 dictionary
2. built-in modules
python에서 제공하는 공식 라이브러리
3. sys.path
• string형으로 되어 있는 경로들을 모아놓은 list(파이썬 라이브러리들이 설치되어 있는 디렉토리를 보여줌)
• 순차적으로 모듈, 패키지를 찾음. 때문에 같은 네임을 가진 함수가 2개의 모듈에 있다고 한다면 list안의 순서에 맞춰 먼저 import되는 모듈의 함수가 실행됨


sys 모듈
sys는 파이썬에 기본으로 제공하는 모듈로서, sys도 import해야하는 모듈임

import sys

print(sys.path)
print(sys.modules)
# 추가하고 싶다면
sys.path.append(모듈을 저장한 디렉토리 경로)

absolute path / relative path
absolute path는 경로가 길어질 수 있는 단점이 있다. relative path가 그 점을 보완해줄 수 있지만 relative path는 경로가 헷갈리기 쉽고 파일 위치가 변경되면 경로도 변경해줘야하는 번거로움이 생길 수 있어 웬만하면 absolute path를 사용하는 것을 추천한다.

absolute path 절대경로
항상 최상위 디렉토리부터 시작하여 경로를 정의

relative path 상대경로
import하는 위치를 기준으로 경로를 정의
dot(.)은 현재 위치 / dot 2개(..)는 부모위치

# absolute path
from package2.subpackage1.module5 import function2

# relative path
from .subpackage1.module5 import function2
from ..module4 import class4
profile
한 줄 소개가 자연스러워지는 그날까지

0개의 댓글