7강 개념 중심 ⏱ 약 20분

 

0. 학습 목표

→ 모듈·패키지·라이브러리를 구분하고, import와 from으로 가져오는 방법을 정리합니다.

더보기

이번 글은 개념 중심 강의입니다.

 

6강까지 가상환경이라는 "공간"을 만드는 방법을 익혔습니다.

9강에서는 그 공간에 외부 패키지를 설치하는데, 그 전에 정리할 것이 있습니다.

Python을 학습하다 보면 모듈(Module), 패키지(Package), 라이브러리(Library)라는 용어를 계속 만나게 됩니다.

 


라이브러리 > 패키지 > 모듈

용어  의미 
모듈(Module) .py 단일 파일 math.py
패키지(Package) 여러 모듈을 묶은 디렉터리 numpy, pandas
라이브러리(Library) 기능 모음 전체 (패키지 포함, 더 큰 개념) "데이터 분석 라이브러리"

 

 

비슷하게 들리지만 가리키는 범위가 다르고, 이 구분이 서 있어야 "pip로 무엇을 설치하는 것인지", "import가 무엇을 가져오는 것인지"가 분명해집니다.

 

 

이번 강의에서는 세 용어를 파일 시스템으로 구분합니다. 미리 결론을 말하면 — 모듈은 파일, 패키지는 폴더입니다.

추상적인 개념 암기가 아니라, 4강부터 해온 것처럼 실제 경로를 눈으로 확인하며 진행합니다.

 

 

구분 내용
이해할 것 모듈 = .py 파일, 패키지 = 모듈을 묶은 폴더, 라이브러리 = 기능 묶음을 넓게 부르는 표현
정리할 것 import와 from의 역할 구분과 네 가지 사용 패턴
확인할 것 random.__file__로 모듈이 실제 파일이라는 것을 직접 확인

 

1. 모듈은 실제 파일이다 — 직접 확인하기

→ random 모듈의 실제 위치를 출력해서, 모듈의 정체가 .py 파일임을 확인합니다.

더보기

용어 정의부터 외우는 대신, 실험 하나로 시작하겠습니다.

터미널에서 python3를 입력해 Python 대화형 셸을 열고 다음을 실행합니다.

(>>> 프롬프트가 보이면 준비된 것이고, 종료는 exit()입니다.)

import random

print("모듈 파일:", random.__file__)         # 이 모듈이 실제로 어디에 있는지 출력
print("사용 예시:", random.randint(1, 10))   # 모듈 안의 기능 사용

 

 

결과 예시:

모듈 파일: /usr/lib/python3.12/random.py
사용 예시: 7

 

 

출력을 보면 random의 정체가 드러납니다.

randomrandom.py라는 실제 파일입니다.

 

 

Thunar로 /usr/lib/python3.12/(버전 숫자는 여러분 환경에 맞게)를 열어보면 random.py 파일이 정말 그 자리에 있고, 다른 이름의 .py 파일들도 수백 개 보입니다. 이것들이 모두 Python이 기본 제공하는 모듈입니다.

 

 

즉, 모듈(Module)은 Python 코드가 들어 있는 하나의 .py 파일입니다.

import random은 "random.py 파일을 가져와라"는 뜻이었던 것입니다.

random.py     → Python이 제공하는 모듈
math.py       → Python이 제공하는 모듈
mymodule.py   → 내가 직접 만든 .py 파일도 모듈이 된다

 

2. 패키지는 모듈을 묶은 폴더다

→ 파일(모듈)이 많아지면 폴더(패키지)로 묶는다는 구조를 확인합니다.

더보기

2.1 패키지

 

random.py처럼 파일 하나로 충분한 기능도 있지만, 기능이 커지면 .py 파일 하나에 다 담을 수 없습니다.

일반 문서 작업에서 파일이 많아지면 폴더로 묶듯이, Python도 여러 모듈을 폴더로 묶어서 관리합니다.

이 폴더가 패키지(Package)입니다.

mypackage/            ← 패키지 (폴더)
├── __init__.py       ← "이 폴더는 패키지다"라고 알려주는 파일
├── a.py              ← 모듈 (파일)
├── b.py              ← 모듈 (파일)
└── c.py              ← 모듈 (파일)

 

 

즉 모듈이 파일 하나라면, 패키지는 모듈 여러 개를 체계적으로 담고 있는 폴더 구조입니다.

9강에서 설치할 PySide6, 그리고 NumPy나 pandas 같은 유명한 이름들이 모두 이런 패키지 형태로 배포됩니다.

모듈은 파일, 패키지는 폴더 — 처음에는 이 구분이 가장 쉽고, 대부분의 경우 이 이해로 충분합니다.


cpython dir

https://github.com/python/cpython/blob/main/Modules/mathmodule.c

 

tensorflow lib.

https://www.tensorflow.org/api_docs/python/tf/keras

 

 

2.2 라이브러리(Library)

 

그렇다면 라이브러리(Library)는 무엇일까요?

 

 

 

라이브러리는 Python의 엄밀한 구조 용어라기보다, 특정 기능을 제공하는 코드 묶음 전체를 넓게 부르는 일반 표현입니다.

모듈 하나(random)를 가리킬 수도 있고, 여러 패키지의 집합(NumPy)을 가리킬 수도 있습니다.

 

 

"표준 라이브러리", "데이터 분석 라이브러리"처럼 실무 대화에서 자주 쓰는 넓은 말이고,

구조를 정확히 말할 때는 모듈·패키지를 씁니다.

 

 

 

용어 정체
모듈 .py 파일 하나 random.py, math.py
패키지 여러 모듈을 묶은 폴더 numpy, PySide6
라이브러리 기능 묶음을 넓게 부르는 표현 "표준 라이브러리", "데이터 분석 라이브러리"

 

3. import와 from 사용법 정리하기

→ 가져오기(import)와 위치 지정(from)의 역할을 구분하고 네 가지 패턴으로 정리합니다.

더보기

3.1 두 키워드의 역할 구분

 

모듈과 패키지를 코드에서 사용하려면 가져와야 합니다. 이때 쓰는 키워드가 importfrom인데, 역할이 다릅니다.

키워드 역할 의미
import 가져오는 동작 "무언가를 가져와라" — 가져오기 자체를 수행
from 위치 지정 "어디에서 가져올 것인지" — 대상의 위치를 지정

그래서 from math import sqrt는 "math(위치)에서 sqrt(대상)를 가져와라"로 읽으면 됩니다. 이 역할 구분 하나로 아래 네 가지 패턴이 모두 해석됩니다.

 

 

 

 

3.2 네 가지 사용 패턴

# 패턴 1: 패키지 전체 가져오기
import numpy
numpy.random.randint(1, 10)          # 사용할 때 전체 경로를 적는다


# 패턴 2: 패키지 안의 특정 모듈만 가져오기
import numpy.random
numpy.random.randint(1, 10)          # 가져온 것은 random 모듈뿐이지만 표기는 전체 경로


# 패턴 3: from으로 위치를 지정해 모듈 가져오기
from numpy import random             # numpy(위치)에서 random(모듈)을 가져온다
random.randint(1, 10)                # 이제 random만으로 바로 사용


# 패턴 4: from으로 위치를 지정해 함수 하나만 가져오기
from math import sqrt                # math(위치)에서 sqrt(함수)를 가져온다
sqrt(16)                             # 함수 이름만으로 바로 사용

 

 

패턴이 아래로 갈수록 가져오는 범위는 좁아지고, 사용할 때 적는 이름은 짧아집니다.

from으로 위치를 미리 지정했기 때문에 사용 시점에 경로를 반복할 필요가 없어지는 것입니다.

이름이 길거나 겹칠 때는 as로 별명을 붙일 수 있습니다.

관례적인 별명(numpy → np)은 널리 통용되므로 그대로 따르는 것이 좋습니다.

import numpy as np           # numpy를 np라는 별명으로 가져온다 (관례)
np.random.randint(1, 10)

from math import sqrt as s   # 함수에도 별명을 붙일 수 있다
s(16)

 

 

지금 네 패턴을 다 외울 필요는 없습니다. "import는 가져오기, from은 위치 지정"이라는 역할 구분만 서 있으면, 다른 사람의 코드에서 어떤 패턴을 만나도 읽을 수 있습니다.

✔ 확인 기준:random.__file__의 출력 경로를 Thunar에서 찾아가 random.py 파일을 확인했고, ② from math import sqrt를 "math에서 sqrt를 가져와라"로 읽을 수 있으면 이번 강의 완료입니다.

- 모듈 = .py 파일 하나 / 패키지 = 모듈을 묶은 폴더 / 라이브러리 = 넓게 부르는 표현
- import = 가져오는 동작, from = 어디에서 가져올지 위치 지정
- pip로 설치하는 것의 정체는 "패키지 폴더를 내 환경에 복사해 넣는 것"이다

 

4. import와 from 사용법 정리하기

더보기

4.1. pip 업그레이드

python.exe -m pip install --upgrade pip

 

 

4.2. pyside6 설치

python.exe -m pip install pyside6

 

 

5. 정리

더보기

5.1 예시 코드

아래 코드는 random을 import한 뒤,

이 모듈이 실제 어디에 있는지 확인하고,

그 안에 들어 있는 기능을 사용하는 예시입니다.

import random

print("모듈 파일:", random.__file__)
print("사용 예시:", random.randint(1, 10))

이 코드를 실행하면 보통 아래와 비슷한 결과를 볼 수 있습니다.

모듈 파일: /usr/lib/python3.12/random.py
사용 예시: 7

여기서 중요한 점은 random이 실제로 random.py라는 파일이라는 점입니다.

 

 

5.2 모듈(Module)이란?

Python에서 모듈(Module)은 보통 하나의 .py 파일을 의미합니다.

즉, Python 코드가 들어 있는 파일 하나가 모듈이 될 수 있습니다.

  • random.py → 하나의 모듈
  • math.py → 하나의 모듈
  • mymodule.py → 내가 직접 만든 모듈

위 예시에서 random.__file__을 출력했을 때 /usr/lib/python3.12/random.py가 보였다면, 이것은 random이 실제 Python 파일 형태의 모듈이라는 뜻입니다.

핵심 정리
모듈 = Python 코드가 들어 있는 하나의 .py 파일

 

 

5.3 패키지(Package)란?

패키지는 여러 모듈(.py라는 파일)을 폴더 단위로 묶어 놓은 것이라고 이해하면 쉽습니다.

즉, 모듈이 파일 하나라면, 패키지는 여러 모듈을 담고 있는 폴더 구조입니다.

예를 들어 아래와 같은 구조를 생각해 볼 수 있습니다.

mypackage/
├── __init__.py
├── a.py
├── b.py
└── c.py

여기서:

  • a.py, b.py, c.py는 각각 모듈입니다.
  • mypackage 폴더 전체는 패키지입니다.

즉, 패키지는 모듈 여러 개를 체계적으로 묶어 관리하기 위한 단위라고 볼 수 있습니다.

학습 포인트
모듈은 파일, 패키지는 폴더라고 이해하면 처음에는 가장 쉽습니다.

 

 

5.4 라이브러리(Library)란?

라이브러리라는 용어는 Python 내부의 엄밀한 구조 용어라기보다, 특정 기능을 제공하는 코드 묶음 전체를 넓게 가리키는 표현으로 많이 사용됩니다.

즉, 라이브러리는 보통 모듈 하나일 수도 있고, 여러 패키지와 모듈의 집합일 수도 있습니다.

예를 들어:

  • random → Python 표준 라이브러리에 포함된 모듈
  • requests → 일반적으로 라이브러리라고 많이 부름
  • numpy → 일반적으로 라이브러리라고 많이 부름

즉, 라이브러리는 실무나 일반 설명에서 자주 쓰는 넓은 표현이고, 모듈 패키지는 Python 구조를 설명할 때 더 정확한 표현입니다.

핵심 정리
라이브러리 = 기능을 제공하는 코드 묶음을 넓게 부르는 일반적인 표현

→ 다음 강의 (8강): 모듈과 패키지에는 버전이 있고, 그 버전이 Python 버전과 맞지 않으면 코드는 그대로인데 실행이 실패합니다. 1번 섹션에서 확인한 random.py 같은 표준 라이브러리조차 버전에 따라 함수가 제거된다는 사실에서 출발해, 호환성 문제의 정체를 확인합니다.