패키지 (package) & 모듈 (module) 上

Bleu·2023년 8월 22일
0

python

목록 보기
3/22

Module 모듈

: 독립적인 기능을 가지고 재사용 가능한 프로그램 단위

→ 이러한 module이 모이면 library 가 됨

(재사용 가능한 함수, 클래스등을 작성한 소스 파)

  • 모듈의 종류
    • 표준 모듈 - 1st party module
      • 파이썬에 내장된 모듈
    • 사용자 정의 모듈 - 2nd Party module
      • 개발자가 재사용을 위해 직접 만든 모듈
    • 3rd Party 모듈
      • 특정 개발업체나 개발자들이 만들어 배포하는 모듈
      • 사용자 정의 모듈도 배포되어 다른 곳에서 사용되면 3rd party 모듈이 된다. (외부에서 만들어서 제공) → 설치 : pip 툴 사용해서 설치함

Package 패키지

: 모듈들을 모아 놓은 것 (python에서는 = library)

python 3.3 이전 버전은 package 디렉토리에 init.py 파일을 그 디렉토리에 반드시 위치시켜야 한다.

  • 3.3 이후에는 위치시킬 필요는 없지만 package안의 모듈들의 import 관련 설정을 해야 하는 경우에는 __init__.py에 작성하고 위치시킨다.
  • Root Package
    • 전체 모듈들을 담고 있는 최상위 패키지(디렉토리)
    • 패키지 내의 속한 패키지를 통칭 sub package 라고 한다.
    • Root package를 제외한 모든 package들은 다 sub package가 된다.



import란…

: 파이썬 모듈 파일에 정의된 변수, 함수, 클래스들을 사용하기 위해 파이썬 실행환경에 등록하는 작업

→ 다른 모듈에 있는 것을 사용하기위해서는 import 필수

→ 모듈 import 시 그 모듈 이름을 namespace로 하여 등록

namespace

  • 여러개의 객체(존재하는 무언가)를 하나로 묶어 주면서 구분자 역할을 하는 이름을 주는 것을 namespace라고 한다.
  • namespace를 이용해 각 그룹들의 객체들을 구분할 수 있다. 그래서 같은 이름의 객체들을 사용할 수 있다.
  • 파이썬에서는 모듈에 정의된 변수, 함수, 클래스 들을 실행환경에 등록할 때 모듈명을 namespace로 묶어서 등록한다.
📍 구문 `[from 사용할 것의 경로] import 사용할 것 [as 별칭] [, 사용할 것..]`

[ ] : 생략 가능한 구문
→ 사용 할 것: 모듈, 모듈안에 정의된 변수, 함수, 클래스

import 모듈

하나의 모듈 import.import 모듈as 별칭# namespace의 이름을 모듈명이 아니라 별칭으로 지정한다.
import 모듈_1, 모듈_2# 여러개 모듈 import.','를 구분자로 나열한다.

ex)

import test_module
import my_moduleas mm
# test_module의 hello() 함수 호출시test_module.hello()
# my_module은 mm 별칭을 지정했으므로 mm을 namespace로 사용한다.p= mm.Person('홍길동', 30)# my_module의 Person 클래스 객체 생성

모듈내의 특정 항목만 import

from 모듈import 함수
 # 함수/클래스가 있는 모듈과 함수를 분리해서 import한다.from 모듈import 클래스
from 모듈import 함수_1, 함수_2, 클래스
from 모듈import*

패키지에 속한 모듈 import

→ import 패키지명.모듈
→ from 패키지명 import 모듈
→ from 패키지명 import 모듈_1, 모듈_2
→ from 패키지명.모듈 import 함수
→ from 패키지명.모듈 import 클래스
→ from 패키지명.모듈 import 함수_1, 함수_2, 클래스
→ from Root패키지.Sub패키지1.Sub패키지2 import 모듈

패키지가 계층구조로 되있을 경우 . 으로 이용해 나열

→ from Root패키지.Sub패키지1.Sub패키지2.모듈 import 함수
→ from Root패키지.Sub패키지1.Sub패키지2.모듈 import 클래스
→ package는 import 불가

📍 주의

* 를 이용하면 그 모듈의 모든 함수/클래스들을 현재 실행중인 namespace에 추가해 사용할 수 있게 해준다. 이 방식은 이름 충돌의 가능성이 있기때문에 추천되지 않음


import 된 모듈 찾는 경로 및 PYTHONPATH

  • import 모듈 구문을 사용하면 파이썬 실행 환경은 모듈을 아래와 같은 경로로 찾음
    1. 현재 실행중인 모듈(import 구문을 사용한 모듈)이 있는 경로
    2. 파이썬 실행환경에 등록된 경로
  • 모듈을 찾는 순서
import sys      # 표준모듈 sys
print(sys.path) # 모듈을 찾는 경로를 저장한 list

→ 위의 경로 이외에 파이썬 모듈은 PYTHONPATH 환경변수에 그 디렉토리 경로를 등록

> sys.path 에 추가
	  (사용할 때 마다 추가해야 함)
> 운영체제 환경변수에 등록 
 	  (한번만 하면 됨)

sys.path → 모듈을 찾는 경로


메인 모듈(Main Module) & 하위 모듈(Sub Module)

  • 메인 모듈 (Main Module)
    • 현재 실행하고 있는 모듈
      • python 모듈.py 로 실행된 모듈
    • application 의 main logic을 처리
  • 하위 모듈 (Sub module)
    • 메인 모듈에서 import 되어 실행되는 모듈
    • 모듈을 import하면 그 모듈을 실행 시킴
      → 이때 모듈에 있는 실행코드들도 같이 실행됨
      → 이를 방지 하기 위해 모듈이 메인 모듈로 실행되는지 하위 모듈로 실행되는지 확인 필요
  • __name__ 내장 전역변수
    • 실행 중인 모듈명을 저장하는 내장 전역변수
    • 메인 모듈은 'main' 을 하위 모듈은 모듈명(파일명) 이 저장됨
    • 모듈이 메인 모듈로 시작하는지 여부 확인 할 때 사용
if __name__== '__main__':
 # 메인모듈일 때만 실행할 코드 블록

ex) calculater 라는 모듈 생성

%%writefile calculater.py

# 사칙연산 모듈

def minus(n1, n2):
   return n1 - n2

def plus(n1, n2):
   return n1 + n2

def multiply(n1, n2):
   return n1 * n2

def devide(n1, n2):
   return n1 / n2

if __name__ == "__name__":
   # 아래 코드는 main모듈로 실행 될 때만 실행
   print("모듈이름")
   print(__main__)  # 파이썬 실행환경이 제공하는 모듈의 이름을 저장하는 변수
 
 
r1 = plus(10, 20)
r2 = minus(100, 20)
r3 = multiply(5,7)
r4 = devide(10, 2)
print(r1, r2, r3, r4) 
# calculater라는 모듈을 cal이라고 명명
import calculater as cal
 # import가 안되면 restart하고 다시 run 해보기
  # (import는 한번만 실행 되기 때문)  
 import calculater as cal

0개의 댓글