[Python] Module
1. Module
- 함수, 변수, 클래스 등 파이썬 구성요소 등을 모아놓은 파일
- 다른 파이썬 프로그램에서 가져와서(import) 재사용하기 쉽도록 만든 파이썬 파일
2. Module 불러오기 (import)
- 현재 directory에 있는 파일이나 파이썬 라이브러리가 저장된 directory에 있는 module만 불러올 수 있다 (파이썬 라이브러리는 파이썬을 설치할 때 자동으로 설치되는 파이썬 모듈을 의미)
- 모듈이름은 ${모듈이름}.py에서 .py 확장자를 제거한 모듈이름만 써준다
import ${모듈이름}
example)
# module1.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
import module1
print(module1.add(2, 5)) # 7
- 모듈이름 없이 함수 이름만 쓰고 싶은 경우에는 아래와 같이
from ~ import ~
구문을 써준다- ex)
module1.add
대신add
만 쓰고 싶은 경우!
- ex)
from ${모듈이름} import ${모듈함수}
example)
from module1 import add
add(2, 5) # 7
3. if __name__ == "__main__"
# module1.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
print(add(2, 3))
print(sub(4, 2))
위 파이썬 파일을 터미널 창에서 바로 실행시킨다면 아래와 같은 출력화면이 뜬다.
--------------------------------------------------
/Users/jinsolkim/Desktop/math>python module1.py
5
2
1) Problem
그런데 이 module1.py 파일의 add
와 sub
함수를 사용하기 위해 module1 모듈을 import할 때도 5와 2가 같이 출력된다.
/Users/jinsolkim/Desktop/math>python
Python 3.9.13 | packaged by conda-forge | (main, May 27 2022, 17:00:33)
[Clang 13.0.1 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import module1
5
2
2) Solution
import module1을 수행하는 순간 module1.py가 실행되어 결과값을 출력하는 것이다. 이러한 문제를 방지하기 위해 써주는 것이 if __name__ == "__main__"
이다.
# module1.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
if __name__ == "__main__":
'''
이 부분에 코드를 추가하는 이유:
이 파일을 개발하면서 타인 또는 자신이 나중에 본 파일을 직접 실행시켰을 때 참고할 테스트를 작성해 놓는 것
즉, 개발 중 이해를 돕기 위해 작성하는 부분
'''
print(add(2, 3))
print(sub(4, 2))
3) Summary
if __name__ == "__main__"
을 사용하면/Users/jinsolkim/Desktop/math>python module1
처럼 파이썬 파일을 직접 실행할 경우 → module1.py의__name__
변수에__main__
값이 저장된다- 즉,
__main__
키워드는 실행되는 대상 파일을 나타낸다
- 즉,
- python shell이나 다른 파이썬 모듈에서
import module1
을 할 경우 → module1.py의__name__
변수에 module1.py의 모듈 이름 값인module1
이 저장된다
3. Module 불러오기 원리 이해
- 위의 #2에서는 모듈을 사용하기 위해 모듈이 위치하고 있는 directory로 이동해서 모듈을 import하여 사용하였다.
- 하지만 module을 불러오는 원리를 이해하고 있다면, 모듈을 저장한 directory로 이동하지 않고 모듈을 불러오는 방법을 사용할 수 있다.
1) sys.path.append()
import sys
print(sys.path)
------------------------------------------------------------
['/Users/jinsolkim/Desktop/project/project2',
'/Users/jinsolkim/.vscode/extensions/ms-toolsai.jupyter-2022.6.1201981810/pythonFiles',
'/Users/jinsolkim/.vscode/extensions/ms-toolsai.jupyter-2022.6.1201981810/pythonFiles/lib/python',
'/Users/jinsolkim/miniforge3/envs/practice/lib/python38.zip',
'/Users/jinsolkim/miniforge3/envs/practice/lib/python3.8',
'/Users/jinsolkim/miniforge3/envs/practice/lib/python3.8/lib-dynload',
'',
'/Users/jinsolkim/miniforge3/envs/practice/lib/python3.8/site-packages']
sys
모듈: 파이썬 설치 시 함께 설치되는 라이브러리 모듈sys.path
- 파이썬 라이브러리가 설치되어 있는 directory를 보여준다
- 만약 파이썬 모듈이 위 directory에 들어있다면 모듈이 저장된 directory로 이동할 필요 없이 바로 불러서 사용 가능
- 필요한 모듈을
sys.path
로 출력되는 list의 directory에 추가해준다면 해당 모듈을 어디서든 사용 가능
sys.path.append(${모듈을 저장한 directory})
sys.path.append('/Users/jinsolkim/Desktop/math')
sys.path
------------------------------------------------------------
['/Users/jinsolkim/Desktop/project/project2',
'/Users/jinsolkim/.vscode/extensions/ms-toolsai.jupyter-2022.6.1201981810/pythonFiles',
'/Users/jinsolkim/.vscode/extensions/ms-toolsai.jupyter-2022.6.1201981810/pythonFiles/lib/python',
'/Users/jinsolkim/miniforge3/envs/practice/lib/python38.zip',
'/Users/jinsolkim/miniforge3/envs/practice/lib/python3.8',
'/Users/jinsolkim/miniforge3/envs/practice/lib/python3.8/lib-dynload',
'',
'/Users/jinsolkim/miniforge3/envs/practice/lib/python3.8/site-packages',
'/Users/jinsolkim/Desktop/math']
- 마지막 줄에
'/Users/jinsolkim/Desktop/math'
이 추가된 것을 확인할 수 있다. 이제 어디서든 모듈을 불러와 사용할 수 있다.
import module1
print(module1.add(2, 5)) # 7
2) PYTHONPATH 환경변수 사용
sys.path.append
코드는 영구적으로 등록하는 것이 아니라 이 파일을 실행시킬 때만 적용되는 것! 임시방편!- python path에 영구적으로 등록하기 위해서는 환경변수에 있는
PYTHONPATH
에 경로를 추가해 놓아야 한다
/Users/jinsolkim/Desktop/math>set PYTHONPATH=/Users/jinsolkim/Desktop/math/module1
import module1
print(module1.add(2, 5)) # 7
Leave a comment