Python/Python 기초

[Python] 모듈 ( Module ), 패키지 ( Package )

죵욜이 2024. 11. 27. 22:18

모듈이란?

모듈은 Python 코드가 저장된 단일파일( .py ) 을 뜻한다.

  • 기능 : 관련된 함수, 클래스, 변수 등을 묶어서 제공
  • 목적 : 코드를 분리하고 재사용하기 쉽게 만드는 것
  • 파일 형식 .py  확장자를 가진 파일

 

'게으른 성격은 좋은 개발자의 자질' 이라는 말을 아시나요?  물론 개발하는것과 공부도 게을러서 미루면 안되죠

 

 

수많은 개발자들은 초기부터 아래와 같은상황에 지쳐있었을 겁니다.

  • 같은 함수를 반복적으로 적는 단순코딩반복
  • 한파일에 모든 코드를 때려박은 미친가독성
  • 비슷한 기능을 하는 함수, 변수 등 을 만들때 이름을 뭘로짓지?
  • 지금 작성한 코드를 다른 프로그램에서도 사용하고싶다
  • 등등

 

위와 같은 상황을 해결하기 위해 만들어진 것이 바로 모듈 입니다. 

 

각박한 현대사회에서 도태되지 않기 위해선 편리한 도구가 탄생했다면 그 장점과 사용법을 알아야 하겟죠?

 

모듈의 장점

  1. 코드 재사용성 : 한번 작성한 코드를 다른 프로젝트나 스크립트에서 재사용 할수 있다
  2. 코드 구조화 : 프로그램을 작은 단위(모듈)로 나눌수 있어 복잡한 프로젝트를 관리하기 쉽다
  3. 네임스페이스 분리 : 모듈은 자체적인 네임스페이스를 가지므로 충돌을 피할수 있다
  4. 유지보수성 : 기능별로 모듈화하면 필요한 부분만 추가, 수정, 삭제등을하며 유지보수가 쉬워진다
  5. 테스트와 디버깅의 용이성 : 모듈단위로 기능을 분리하면 각 모듈을 독립적으로 테스트 할수 있다
  6. 표준 라이브러리 및 커뮤니티 모듈 활용 : 남이 만든 모듈을 활용해 편하게 작업이 가능하다
  7. 협업에 유리하다
  8. 가독성이 좋아진다

 

그래서 편한건 알겠고 어떻게 사용하는건데?

모듈 가져오기 ( Importing a Module )

(1) 기본 import

import math  # math 모듈 가져오기

print(math.sqrt(16))  # 4.0

# 여러개의 모듈 import 가능
import math, random

(2) 모듈의 특정 부분만 가져오기

from math import sqrt  # sqrt 함수만 가져오기

print(sqrt(16))  # 4.0

 

(3) 별칭( alias ) 사용하기

import math as m  # math 모듈을 m으로 사용

print(m.sqrt(16))  # 4.0


from math import sqrt as square_root

print(square_root(16))  # 4.0

사용자 정의 모듈 사용

(1) 모듈 생성

  •  .py  파일을 생성하고 함수나 클래스 정의
# my_module.py
def greet(name):
    return f"Hello, {name}!"

(2) 모듈 가져오기

  • 동일 디렉토리에 있는 사용자 정의 모듈을 가져온다.
import my_module

print(my_module.greet("Alice"))  # Hello, Alice!

모듈 탐색 경로

Python 에서 모듈을 불러올 때 아래와 같은 순서로 모듈을 찾습니다.

  1. 현재 작업 디렉토리 : 현재 실행 중인 스크립트가 있는 폴더
  2. 표준 라이브러리 경로 : Python 이 기본적으로 제공하는 라이브러리들이 위치한 폴더
  3. 환경 변수에 지정된 경로 PYTHONPATH  환경 변수에 지정된 폴더

위 내용들을 숙지하고 모듈을 사용하면 더욱 깔끔하고 편하게 개발을 할 수 있을것입니다.

 

하지만 복잡한 프로젝트를 진행하다보면 이 모듈도 너무많아져서 불편함을 느낄 수 있을텐데요

 

그러다보면 ' 함수, 클래스, 변수 등을 묶어논 모듈 을 묶어논건 없나? ' (모듈의 모듈?, 모듈모듈?)라는 의문을 가질수 있는데 이것이 바로 패키지 입니다.

 

패키지( Package )

여러 모듈을 하나의 디렉토리로 묶어둔것을 말한다.

관련 모듈을 체계적으로 조직화할 수 있으며, 대규모 프로그램에서도 코드 관리와 재사용성이 향상된다고하는데

모듈을 묶어둔 것이니 모듈의 특징과 장점이 거의 똑같다고 보면된다.


패키지의 구성

패키지는 디렉토리로 구성되며  __init__.py  파일이 있어야 한다.

mypackage/
├── __init__.py       # 패키지를 초기화하는 파일 (선택 사항)
├── module1.py        # 모듈 1
├── module2.py        # 모듈 2
└── subpackage/       # 서브패키지
    ├── __init__.py
    └── module3.py

 

디렉토리구조라 패키지안의 패키지 (서브패키지) 도 가능

from my_package.sub_package.module3 import another_function
another_function()


__init__.py 파일 

  • 패키지를 파이썬 패키지로 인식하게 한다.
  • 파이썬3.3 이후에는 선택사항 이지만, 명시적으로 작성하는 것이 좋다
  • 패키지 초기화 코드 또는 기본적으로 노출할 모듈을 설정할 수 있다.

패키지 사용법

패키지에서 모듈을 꺼내려면  package.module  이라고 표현하고 꺼낸모듈을 사용하는방식은 똑같다

# 패키지에서 특정 모듈 가져오기
import mypackage.module1

# 패키지에서 특정 모듈 가져오기
from mypackage import module1


# 모듈 내 특정 함수 가져오기
from mypackage.module1 import some_function
some_function()


# 서브패키지의 모듈 가져오기
from mypackage.subpackage import module3

module3.another_function()

여기까지 알게되면 어지간한 프로젝트는 소화할수 있을것이다.

 

하지만 더크고 복잡한 프로젝트를 진행하거나, 위에 말한 모듈의장점

' 표준 라이브러리 및 커뮤니티 모듈 활용' 을 보고 내가 하고있는 고민을 수많은 사람들이 똑같이 했을탠데 쉬운 해결책이 없나?? 있다면 어떻게 긁어와서 활용하지?? 라는 생각을 할것이다.

 

이럴때는 양이너무 방대해져서 패키지의 패키지(점점 뇌절같지만)

함수,변수,클래스 등을묶은 모듈을 묶은 패키지를 묶은 패키지(모듈모듈모듈?) 이런건 없나? 라고 생각할 수 있다.

정확한 설명은 아니지만 이런 패키지들을 묶어둔걸 라이브러리( Library ) 라고 표현한다.

 

라이브러리

  • 라이브러리특정 기능을 수행하기 위해 만들어진 코드의 모음이다
  • 재사용성, 효율성, 생산성 향상을 목적으로 만들어진다
  • 프로그래밍 언어마다 라이브러리의 개념이 다소 차이는있지만 Python 에서는 모듈과 패키지의 집합으로 구현된게 일반적

쉽게말해서 패키지의 패키지 라고했지만 모듈도 들어갈수있는

여러 모듈과 패키지의 집합 이라고 생각하면 된다. 개념적으로 더 큰 범주를 지칭한다.

 

 

 


그렇다면 이런 외부 라이브러리를 사용하고 싶을때 어떻게 해야할까?

  1. 라이브러리를 설치
  2. 사용할 라이브러리를 상단에서 import 하기
  3.  module.function()   등으로 사용

 

이러한 순서로 사용하게 되는데 강의에서 자주보던  math  같은 경우는 표준라이브러리로 파이썬에 이미설치된 빌트인모듈이다. 그래서 1번과정 이 생략된것이다

 

 numpy pandas  같은 경우는 외부라이브러리라 설치를 해야한다.

 

설치하는방법은 다음과같다

pip install 라이브러리이름
  • CLI 를 통해 사용 -> 터미널

 

여기서 CLICommand Line Interface 의 약자로 텍스트를 이용해 시스템과 상호작용하는것이다

 

간단히말하면 Windows 명령프롬프트 cmd / 맥과 리눅스의 터미널이라고 생각하면 된다.

위 사진과 같이 파이참에서 터미널을 누른후

pip install numpy

를 입력하니 넘파이가 설치되는걸 볼 수있다.

 

하지만 이런 CLI 가 익숙치 않은 사람들이 Python 공부 초기에 대다수일 것이라 생각한다.

 

이런사람들을 위해 PyCharm 은  pip  명령을 내부적으로 지원하는데, GUI 를 통해 라이브러리를 설치할 수 있다.


1. Pycharm 환경 설정 열기

   - Windows / Mac : 메뉴에서  File > Settings 

   - 단축키

  • Windows / Linux :  Ctrl + Alt + S 
  • Mac :  Cmd + , 

 

2. Python Interpreter 선택

  • 왼쪽 메뉴에서  Project : <프로젝트 이름> > Python Interpreter 선택

3. 패키지 추가

  • 우측 상단의  +  버튼을 클릭하여 패키지 설치 창을 연다

pip 은 Python의 기본 패키지 관리자 라서 자동으로 설치된것이라 원래는 pip 만 하나 있을것이다.

 

아까 터미널에서 설치한  numpy 도 들어가있는걸 볼 수있다.

 

4. 설치할 라이브러리 검색

  • 설치할 패키지 이름 ex)  numpy pandas requests  을 입력후 검색
  • 해당 패키지를 선택하고  Install Package  를 클릭하면 설치완료

 


위 방식대로 진행하면 이제 편하게 여러모듈을 끌어다가 쓸 수 있을것이다.

 

마지막으로 정리를 하기위해 제가 좋아하는 축구로 비유를 하겠습니다.

 

축구선수들을 함수, 변수, 클래스 등이라고 가정하면

 

국가대표 감독은 여러 패키지, 라이브러리에서 선수들을 뽑아다가 사용해야합니다. 

 

이때 선수들이 모인 소속팀이 패키지 , 이런 팀들이 모여있는 곳이 리그가 된다고 생각된다면 개념을 잘 잡으신겁니다.

 

그래서 국대 감독이된다면

import Premier_League
from Bundesliga import Bayern
from Ligue_1.PSG import 이강인

print(Premier_League.손흥민(발탁))
print(Bayern.김민재(발탁))
print(이강인(발탁))

이런식으로 코드를 작성하면 국대멤버들을 발탁해서 사용하게되는겁니다.

'Python > Python 기초' 카테고리의 다른 글

[Python] 예외 처리 ( try, except, finally ), 에러 타입  (1) 2024.12.01
[Python] 함수  (0) 2024.12.01
[Python] 반복문 ( for, while )  (0) 2024.11.20
[Python] 조건문 ( if , elif , else )  (0) 2024.11.19
[Python] 연산자  (0) 2024.11.18