Python/기초

파이썬 패키지와 모듈 (모듈 생성, 모듈 가져오기, 모듈 설치, 패키지 생성, 패키지 사용하기)

sdesign416 2026. 6. 1. 16:58

Python에서 프로그램을 만들다 보면 코드의 양이 점점 많아지게 된다.

 

처음엔 하나의 파일에서 모든 코드를 작성해도 문제가 되지 않지만,

프로젝트 규모가 커질수록 기능별로 코드를 분리하여 관리하는 것이 좋다.

 

이때 모듈(Module)과 패키지(Package)을 사용하게 된다.


모듈(Module)이란?

Python에서 모듈은 관련된 함수, 클래스, 변수들을 하나의 파일(.py)로 묶어놓은 것을 의미한다.

 

모듈을 사용하면 코드를 기능별로 분리할 수 있어

관리가 쉬워지고, 다른 파일에서도 재사용할 수 있다.

 

해당 모듈 파일은 다른 사람이 만든 모듈을 가져와 사용할수도 있고

내가 직접 모듈을 만들어 코드를 관리할 수도 있다.


모듈의 장점

기능별로 코드를 분리하여 관리할 수 있기 때문에

코드 가독성이 좋고 유지보수가 편리하다.

그리고 여러 파일에서 import로 불러와 쉽게 재사용이 가능하다.


터미널 실행 방법

작성한 파이썬 파일을 샐항하기 위해선

터미널창을 열고 아래 명령어 입력을 통해 실행할 수 있다.

 

이때, 명령어를 실행하는 터미널의 현재 경로(위치)가

실행하려는 파일이 있는 폴더와 일치해야한다!!

# 기본 터미널 명령어
python .\파일명.py

# 하위폴더안에 파일 실행 명령어
python .\폴더명\파일명.py

1. 모듈 파일 만들기

먼저 새로운 Python 파일 하나를 생성한다.

예시로 fruit.py 파일을 생성하여 아래 코드를 입력하여 모듈로 사용한다.

※ .ipynb 파일이 아닌 .py파일로 제작해야함!

# 변수생성
PI = 3.14                      

# 함수1
def print_fruit(name):          
    print(f"{name}입니다.")

# 함수2
def add_quantity(quantity, amount):
    return quantity + amount

# 클래스
class Fruit:
    # 생성자
    def __init__(self, name, quantity):
        self.name = name
        self.quantity = quantity

    # 메서드
    def print_info(self):
        print(f"과일 이름: {self.name}")
        print(f"수량: {self.quantity}")

 

해당 모듈이 잘 설정되었는지 확인하려면

터미널 영역에서 python .\fruit.py 을 실행하여 (venv) 가상환경이 설정되면 완료된것이다.

python .\fruiit.py = 현재 폴더에 있는 특정 파이썬 파일을 실행한다는 명령어로

   모듈이나 메인 코드가 의도한대로 잘 작동하는지 터미널에서 최종확인할 때 사용한다.

터미널 실행결과 ▶


2. 모듈 가져오기

위에서 만든 모듈은 import를 사용하여 다른 파일에서 사용이 가능하다.

먼저 fruit.py와 같은 위치에 main.py 파일을 생성하여 아래코드를 입력하고 저장한다.

# fruit.py 모듈을 가져와서 사용함
import fruit

# 가져온 모듈의 print_fruit 함수 호출 → 사과 값 전달
fruit.print_fruit("사과")

# 모듈의 add_quantity 함수를 사용 → 수량더하고 결과출력
result = fruit.add_quantity(10, 5)
print(result)

# Fruit 클래스로부터 apple 객체 생성 → 객체정보 출력
apple = fruit.Fruit("사과", 10)
apple.print_info()

main.py 파일에 코드를 잘 넣었다면

터미널 영역에서 python .\main.py 해당 명령어를 입력하면

아래와 같은 실행결과가 나타난다.

 

터미널 실행결과 ▶

위 결과를 보면 main.py 파일에서 직접 함수를 만들지 않았지만

fruit.py에 작성한 함수와 클래스를 정상적으로 사용할 수 있는 것을 확인할 수 있다.


3. 필요한 기능만 가져오기

모듈 전체를 가져오는 것이 아니라

특정 함수나 클래스만 가져오는것도 가능하다.

# 사용구조
from 모듈명 import 기능명
# main.py 파일에 저장

from fruit import Fruit
from fruit import add_quantity

apple = Fruit("사과", 10)

apple.print_info()

print(add_quantity(10, 5))

위 코드를 main.py에 입력해서 터미널을 실행해보면

기존에 fruit모듈에 있던 모든 기능들이 나타나는것이 아닌

import로 지정한 print_info에 대한 내용만 나타나는 것을 확인할 수 있다.

 

터미널 실행결과 ▶

해당 방식은 사용할 기능이 명확히 정해져있을 때 사용하여

코드를 간결하게 만들어주는 장점이 있다.


4. 모듈 별칭 사용하기

모듈 이름이 길다면 별칭을 지정하여 사용할 수 있다.

as 키워드를 사용하여 원하는 이름으로 모듈을 사용할 수 있다.

# main.py 파일에 저장

import fruit as fr

fr.print_fruit("바나나")

실행결과 ▶


5. __name__

Python에선 __name__이라는 내장 변수가있다.

이 변수는 현재 파일이 직접 실행된 것인지,

다른 파일에서 import된 것인지를 알려준다.


현재 파일의 name 확인하기

현재 파일이 직접 실행되었기 때문에 __main__이 출력된다.

# 코드
print("__name__ 값:", __name__)

# 터미널 실행
python .\fruit.py

터미널 실행결과 ▶

 


import 된 경우

fruit.py 가 직접 실행된 것이 아니라

import 되었기 때문에 파일명인 fruit 가 출력된다.

# 코드
print("__name__ 값:", __name__)

# 터미널 실행
python .\main.py

터미널 실행결과 ▶

 


패키지 (Package)

패키지는 여러개의 모듈을 하나의 폴더로 묶어 관리하는 방법으로

프로젝트가 커질수록 파일이 많아지기 때문에

패키지를 사용하면 관리하는데 훨씬 수월해진다.

.py 파일로 줄게 많을때 패키지를 사용한다.

비슷한 녀석들 끼리 하나의 폴더 안에 담아서 폴더째 주게되는데

이때 해당 폴더를 패키지라고 한다.

 

패키지는 폴더(디렉토리)로 구성되며

폴더안에 바로 .py파일을 넣을 수도 있고 or 폴더안에 폴더를 넣어 만들수도 있다.

 

아래처럼 파일을 생성

# 프로젝트 폴더 구조
myproject/
├── main.py
└── fruits/
    ├── __init__.py
    ├── apple.py
    └── banana.py

 

fruits/__init__.py 파일 내용

from .apple import info as apple_info
from .banana import info as banana_info

__all__ = ["apple_info", "banana_info"]

 

fruits/apple.py 파일 내용

def info():
    return "사과입니다"

 

fruits/banana.py 파일 내용

def info():
    return "바나나입니다"

패키지 사용하기

main.py 파일을 생성하여 아래 코드를 입력후 터미널을 실행한다.

from fruits import apple_info, banana_info

print(apple_info())
print(banana_info())

 

터미널 실행결과 ▶

 


init.py는 꼭 필요할까?

예전 파이썬 버전에서는 패키지를 만들 때 init.py 파일이 반드시 필요했다.

현재는 없어도 패키지로 인식되는 경우가 많지만,

패키지 초기화 코드 작성, 공개 API 정의, 공통 설정 관리 등을 위해 여전히 자주 사용된다.

실무에서도 대부분 생성해두는 편이다.


random 모듈

랜덤 동작을 위해 만들어진 함수

사용 전 랜덤모듈을 불러와 사용이 가능하다.

import random

1) 자주 사용하는 함수들

TIP : 랜덤 객체를 이미 만들고있음(인스턴스메소드)
         이 인스턴스 메소드를 함수형태로 바꿔 내보내고 있는 형태이다.

import random

# 1. random.random() → 0 이상 1 미만 실수
print("random():", random.random())

# 2. random.randint(a, b) → a 이상 b 이하 정수
print("randint(1, 6):", random.randint(1, 6))

# 3. random.randrange(a, b) → a 이상 b 미만 정수
print("randrange(1, 10):", random.randrange(1, 10))

# 4. random.choice() → 리스트에서 1개 선택
fruits = ["사과", "바나나", "오렌지"]
print("choice:", random.choice(fruits))

# 5. random.sample() → 중복 없이 여러 개 선택
numbers = list(range(1, 11))
print("sample:", random.sample(numbers, 3))

# 6. random.shuffle() → 리스트 섞기
cards = ["A", "K", "Q", "J"]
random.shuffle(cards)
print("shuffle:", cards)

2) seed()

random.seed()는 난수 생성기의 초기값을 설정해

동일한 난수 결과를 재현 가능하게 만들어주는 함수이다.

 

의사난수란?

컴퓨터는 사실 진짜로 무작위 숫자를 만드는게 아니라,

수학적 알고리즘(메르센 트위스터)을 통해 무작위처럼 보이는 숫자(의사난수)를 계산하는것이다.

알고리즘으로 계산하는것이기 때문에 규칙이 존재하게 된다.

이 특징을 활용하여 테스트나 머신러닝 실험에 유용하게 사용되며,

속도가 빠르기 때문에 일반적인 프로그래밍에서 널리 사용되고 있다.

 

seed() 값을 안주면?

seed()값을 주지않으면

컴퓨터가 알아서 시드 값을 등록하여 사용하기 때문에,

실행할 때 마다 매번 다른 무작위 값이 나오는것처럼 보인다.

import random

print(random.randint(1, 10))
print(random.randint(1, 10))
print(random.randint(1, 10))

# 출력결과 매번 다름

 

seed() 값을 특정 숫자로 고정하면?

숫자가 무작위로 뽑히는 첫 출발점을 지정할 수 있다.

즉, 코드를 언제, 어디서, 볓 번 실행하더라도

항상 똑같은 숫자가 똒같은 순서로 출력되게 된다.

import random

# 시드 설정
random.seed(2026)

print(random.randint(1, 10))
print(random.randint(1, 10))
print(random.randint(1, 10))

# 한 번 출력된 결과는 계속 재실행해도 결과가 똑같이 나옴
# 출력결과 : 
2
6
9

 

💡 seed() 언제 사용할까?

연구나 데이터 분석, 프로그램 테스트를 진행할 때

프로그램 결과가 매번 바뀌면 오류 수정이 어렵다.

이때 결과를 똑같이 재현해서 실험하고 싶을 때 유용하게 사용할 수 있다.


모듈 설치하기

1) 가상환경 생성 및 가상환경 활성화

가상환경 설정방법 링크

# 1) 가상환경 생성
python -m venv venv

# 2) 가상환경 활성화
# windows
venv\Scripts\activate 

# mac
source venv/bin/activate

 

2) pip 위치 확인

터미널에 코드를 입력하여 확인할 수 있으며

실행 시 venv안에 pip파일이 있는지 확인해야 한다.

# 터미널 실행코드
where pip      # Windows
which pip      # Mac/Linux

터미널 실행결과 ▶

 

3) python 경로 확인

터미널에 코드를 입력하여 확인하며,

이떄 venv 경로인것을 확인해야한다.

# 터미널 실행코드
where python      # Windows
which python      # Mac/Linux

터미널 실행결과 ▶

 

4) numpy, pandas 설치

아래 두가지 코드를 각각 터미널에 입력하여 실행하면

numpy와 pandas가 설치된다.

pip install numpy pandas # pip이 다른 python을 가리키고 있을 수도 있음
python -m pip install numpy pandas # 현재 python이 사용하는 환경에 설치됨

 

5) 패키지 목록과 각 버전 확인

설치한건 2가지이지만 여러개 파일이 나타나게 된다.

numpy나 pandas를 개발한 개발자도 다른 모듈을 사용하여 만들었는데

이때 이 의존성 모듈도 함께 설치되기 때문이다.

  • 현재 환경 기준으로만 보여줌 (전역/다른 venv와 독립)
  • 패키지 이름 + 버전 확인 가능
  • 설치 여부 빠르게 체크 가능
pip list

requirements.txt

파이썬은 뭘 깔고 모듈은 뭘깔고 버전은 어떻고 다 불러주기 어렵기 때문에

환경을 바로 재현하기 위해 만들어진 파일이다.

1. requirements.txt 생성

터미널에 아래 코드를 입력하여 생성한다.

pip freeze > requirements.txt

# 직접 작성도 가능하다(버전없이 가능)
numpy
pandas

터미널코드 입력 시 파일이 생성된것을 확인할 수 있다.

 

2. requirements.txt 사용 방법

터미널에 아래 코드를 입력하여 실행할 수 있으며

다른 환경에서 실행시 파일에 있는 모든 패키지가 자동으로 설치된다.

pip install -r requirements.txt