개발기록장

[Python] 파이썬 모듈과 패키지(1) - 개념 본문

TIL/Python

[Python] 파이썬 모듈과 패키지(1) - 개념

yangahh 2021. 1. 16. 05:31

 

1. Modules

 

- 파이썬에서 모듈이란?

변수나 함수, 클래스 등을 모아놓은 파이썬 파일(.py)을 모듈이라고 한다.

다른 파이썬 프로그램에서 불러와 사용할 수 있게 만든 파이썬 파일이라고도 할 수 있다.

.py 확장자를 제외한 파일 명이 모듈 명이 된다.

 

- 모듈을 사용하는 이유

  • 재사용에 효율적
  • 코드가 너무 커졌을 때 여러 파일로 나누어 정리

 

- 모듈 사용 방법

  • import 키워드

# import <모듈 명>
import my_module

# <모듈 명>.<모듈에서 사용하길 원하는 변수/함수/클래스 명>
my_module.func1()

모듈을 사용할 때 모듈 이름을 앞에 붙여줘야 하는 이유는 파이썬이 어느 파일을 봐야 해당 변수/함수/클래스를 찾을 수 있는지 알 수 있기 때문이다. 이런 구조를 "name space"라고 한다.

 

  • from import 키워드

# from <모듈 이름> import <변수/함수/클래스1>, <변수/함수/클래스2>, ...
from my_module import func1, MyClass1

# import만 쓸 때와 다르게, 변수/함수/클래스 이름 앞에 모듈 이름을 쓰지 않아도 됨
func1()
a = MyClass1()

 

  • as 키워드

import my_module as m1
from my_module2 import func1 as f1
from my_module3 import func2 as f2

a = m1.MyClass1()
f1()
f2()

as 키워드를 통해 별칭을 줄 수 있다. 여러 모듈을 import할 때 동일한 변수/함수/클래스 이름이 있다면 충돌날 수 있는데, as 키워드를 사용하여 이를 방지할 수 있다.

 

 

 

 

2. Package

 

- 파이썬에서 패키지란?

여러 파이썬 파일들을 모은 디렉토리를 패키지라고 한다. 이때 디렉토리 이름이 패키지 명과 같다.

패키지도 모듈과 마찬가지로 다른 파일의 변수, 클래스, 함수들을 사용하는 개념이다.

 

- 패키지를 사용하는 이유

  • 모듈에 코드 양이 너무 많아서 한 파일에 다 넣기에 비효율적일 때 여러 파일에 나누어 코드를 관리하면 효과적
  • 공동 작업이나 유지 보수에 유리
  • 패키지 구조로 모듈을 만들면 다른 모듈과 이름이 겹치더라도 더 안전하게 사용 가능

 

- 패키지 사용 방법

패키지를 사용하는 방법은 모듈을 사용하는 것과 동일하게 import, from import, as 키워드를 사용하여 import 할 수 있다.

단, dot notation 으로 해당 패키지에서 사용하고자 하는 모듈을 import 하면 된다.


# import <패키지 명>.<모듈 명>
# from <패키지 명>.<모듈 명> import <변수/함수/클래스 명1>, <변수/함수/클래스 명2>, ...
import pkg.module1
from pkg.module2 import func2


# <패키지 명>.<모듈 명>.<변수/함수/클래스 명>
pkg.module1.func1()
func2()

 

- 패키지의 __init__.py 파일이란?

파이썬은 패키지 안에 __init__.py 파일을 만들어서 패키지 초기 설정을 할 수 있다.

패키지가 import 될 때 __init__.py 파일의 코드를 자동으로 실행시키기 때문이다.

이 외에 __init__.py 파일의 기능은 아래와 같다

  • import 할 때 경로의 길이를 줄여줄 수 있다. __init__.py 파일에 한번 import를 선언해주면 된다.
  • 패키지 import시 가장 먼저 실행되는 파일이기 때문이다.
  • __all__변수를 통해 패키지에서 import 할 수 있는 변수/함수/클래스를 제한할 수 있다.
  • __all__ 변수는 string 타입의 요소를 가지고 있는 리스트이다. 따로 선언하지 않으면 default값으로 모든 변수/함수/클래스가 들어간다.
  • 그 외 패키지가 import 될 때 반드시 먼저 실행되어야 하는 코드를 실행시킬 수 있다.
  • __init__.py 파일 안에 내용이 없더라도 이 파일이 있는 디렉토리가 패키지라는 것을 알려주는 역할도 한다.
    (파이썬 3.3 이상 부터는 __init__.py 파일이 없어도 패키지로 인식되지만, 하위 버전 호환을 위해 __init__.py 파일을 작성하는 것을 권장한다)
       

 

- 외부의 패키지 사용 방법 (pip)

다른 사람이 만든 패키지를 import 해서 사용하기 위해서는 먼저 패키지를 설치해야 한다.

예를 들어 Django라는 패키지를 사용하기 위해서는 먼저 Django를 설치해야 한다.

파이썬에서 패키지를 설치하려면 PIP라는 툴을 사용하면 된다. PIP는 파이썬의 package manager로, 파이썬을 설치하면 함께 설치된다.

사용법은 아래와 같다.

pip install Django

 

 

 

 

3. import 시 파이썬이 모듈과 함수를 찾는 순서

 

- import search 순서

모듈이란 패키지를 import를 하려면 해당 파일이나 디렉토리가 어디있는지 파이썬이 찾을 수 있어야 한다.

파이썬은 이들을 찾기 위해 아래 3곳을 순서대로 보면서 찾는다.  

 

1) sys.modules

모듈이나 패키지가 실행되고 한 번 이상 import가 되었다면 sys.modules안에 dictionary 형태로 저장된다.

따라서 파이썬 인터프리터가 모듈이나 패키지를 찾기위해 가장 먼저 확인하는 곳이다.

 

2) bulit-in modules

파이썬에서 제공하는 파이썬 공식 라이브러리들이다. Built-in 모듈들은 이미 파이썬에 포함되어 나오므로 파이썬이 쉽게 찾을 수 있다.

 

3) sys.path

가장 마지막으로 보는 곳이 sys.path다. sys.path는 string타입의 요소들을 가지고 있는 list이다. 각 요소들은 경로가 저장되어있다. 파이썬은 각 경로를 하나 하나 확인하면서 해당 경로에 import 하고자 하는 모듈이나 패키지가 위치해 있는지 확인합니다.

여기서도 발견하지 못한다면 ModuleNotFoundError 에러를 리턴한다.

 

 

- 그렇다면 파이썬은 sys는 어떻게 찾을까?

sys는 파이썬에서 제공하는 모듈이다. os모듈안에 있으며 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈이다.  또한 sys는 built-in 되어 있으므로 

sys.modules를 출력해보면 sys가 built-in 되어 있음을 볼 수 있고 따라서 sys는 bulit-in modules에서 찾을 수 있다.