✅ 모듈이란?


  • 파이썬 하나의 파일 .py 파일 을 의미합니다.
  • 그 파일 안에는 변수와 함수로 구현하여 모듈로 사용할 수 있습니다.
  • 재사용하고 싶은 코드가 있거나, 한 파일 내부에서 코드가 길어질 경우 모듈을 사용할 수 있습니다.

모듈 불러오기

# 첫번째 방법
import 모듈이름

# 두번째 방법
from 모듈이름 import 함수/변수 이름

# 지양하세요
# local scope 변수/함수와 이름 충돌이 발생
# 충돌이 어디서 발생했는지 쉽지 않습니다.
from 모듈이름 import *


# 사용할 때엔 이렇게
함수이름()
print(변수이름)

✅ 패키지란?


  • 여러 모듈이 모여있는 디렉토리입니다.
  • .py 파일 여러개를 만들어 놓은 하나의 폴더입니다.

패키지 불러오기

import 패키지.모듈이름

from 패키지.모듈이름 import 변수/함수
  • __init__.py
    해당 폴더 (디렉토리)를 패키지처럼 사용할 수 있습니다.
    만약, 패키지 안에 있는 3개의 모듈을 불러와서 사용해야 한다면 불러오는 코드는 다음과 같을 것입니다.
# 모듈이 필요한 파이썬 파일 내 작성하는 코드

from 패키지.모듈1 import 모듈1
from 패키지.모듈2 import 모듈2
from 패키지.모듈3 import 모듈3

이를 간편하게 해주는 것이 _init__.py 파일입니다.
모듈 3개와 __init__.py 파일을 같이 묶어 다시 하나의 디렉토리에 넣어줍니다.
이 때 __init__.py는 빈 파일이 될 수도 있고, 모듈 3개의 경로를 담고 있는 파일일 수도 있습니다.

# 패키지.감싸는디렉토리.__init__.py (경로)
from .모듈1 import 모듈1
from .모듈2 import 모듈2
from .모듈3 import 모듈3

# 또는 함수, 변수명 제한하여 사용
from .모듈1 import 모듈1
from .모듈2 import 모듈2
from .모듈3 import 모듈3

__all__ = [모듈1, 모듈2, 모듈3]

이제 다른 파일에서 3개의 모듈을 사용하고 싶을 때 다음과 같이 사용하면 됩니다.

# 모듈7.py 파일에서 사용한다고 가정
import 감싸는디렉토리

모듈1()
모듈2()
모듈3()

# __all__ 사용
from 패키지.감싸는디렉토리 import *

모듈1()
모듈2()
모듈3()
모듈4() # <=== error 발생

결국 감싸는디렉토리가 또 하나의 패키지로 사용됩니다.


생각해보기

📌 sys.modules와 sys.path의 차이점


sys.module

  • 파이썬이 모듈이나 package를 찾기 위해 가장 먼저 확인하는 곳입니다.
  • dictionary 형태로 이미 불러온 (import된) 모듈과 패키지를 저장하고 있습니다.
  • 새로 불러오는 모듈은 찾을 수 없습니다.

built-in modules

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

sys.path

  • 위 두가지에서 모듈과 패키지를 찾을 수 없을 때 마지막으로 찾는 장소입니다.
  • list 형태로 string 요소들을 가지고 있습니다.

각 string 요소들은 다음 처럼 경로를 나타냅니다:

['',
 '/Users/song-eun-u/anaconda3/bin',
 '/Users/song-eun-u/anaconda3/lib/python36.zip',
 '/Users/song-eun-u/anaconda3/lib/python3.6',
 '/Users/song-eun-u/anaconda3/lib/python3.6/lib-dynload',
 '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages',
 '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/aeosa',
 '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/IPython/extensions',
 '/Users/song-eun-u/.ipython']

[error] ModuleNotFountError

sys.path에서도 찾지 못하면 다음 에러를 리턴합니다.


📌 sys 도 import 해야하는 모듈이다. 파이썬은 sys 모듈의 위치를 어떻게 찾을 수 있을까?


sys 모듈을 import 하여 sys.module과 sys.path를 출력하고 수정할 수 있습니다.

import sys

print(sys.path)
print(sys.modules)

📌 Absolute path와 relative path의 차이점


모듈이나 패키지를 import할 때 그 모듈의 경로를 작성해주어야 합니다.

절대경로 (Absolute path)

  • 파일과 폴더가 있는 경로를 표시하는 방법으로 최상위 루트를 반드시 포함하는 경로 주소입니다.
  • 누가 보더라도 파일과 폴더가 특정 컴퓨터에서 어디 위치해있는지 알 수 있습니다.

예시)

C:\Users\UserID\Desktop\test.txt
최상위루트/하위루트/그다음하위루트/파일이름...

상대경로 (relative path)

  • 파일과 폴더를 기준으로 다른 파일의 경로를 표시하는 방법입니다.
  • dot(.)은 현재 파일의 위치를 의미합니다.
  • dot * 2 (..)은 상위 디렉토리로 이동하는 경로를 의미합니다.

예시)

동일한 디렉토리의 "파일3"을 참조하는 경우
>> .파일3

상위 디렉토리의 "파일7"을 참조하는 경우
>> ../파일7

외부 "B디렉토리"의 "파일17"을 참조하는 경우
>> ../B디렉토리/파일17


📌마치면서


자바스크립트를 공부하면서 변수나 함수를 다른 파일에서 가져와 사용할 때가 많았다.
특히 componene를 공유해야하는 리액트의 경우 더욱 많이 사용했던 것 같다.

몰라서 나중에 고생하는 것보다 기본을 다져놓고 시작하면 자바스크립트를 공부할 때와 달리 덜 헤매지 않을까,,🙄

profile
다른 사람에게 누구나 이해할 수 있는 말로 설명하기

0개의 댓글