본문 바로가기
IT/파이썬 기초 (Python)

#021 파이썬 기초 - 모듈 1편 (Python Module Part 1)

by DoitSQL 2023. 3. 3.
728x90

Python기초강의강좌, 파이썬기초강의강좌, import, py파일컴파일

#021 파이썬 기초 - 모듈 1편 (Python Module Part 1)  

Python Module Part 1

앞에서 함수를 통해 여러분의 프로그램 안에서 코드를 재사용하는 방법에 대해서 배워 보았습니다. 그러면 여러 함수들을 한꺼번에 불러들여 재사용하는 방법은 없을까요? 네, 이럴 때 모듈을 이용합니다.

모듈을 작성하는 데에는 여러 가지 방법이 있습니다만, 가장 간단한 방법은. py 확장자를 가진 파일을 하나 만들고 그 안에 함수들과 변수들을 정의해 두는 것입니다.

모듈을 작성하는 또 한 가지 방법은 여러분이 현재 사용 중인 파이썬 인터프리터를 만드는 데 사용되는 프로그래밍 언어로 모듈을 작성하는 것입니다. 예를 들어, 표준 파이썬 인터프리터를 사용 중인 경우 C 언어를 이용하여 모듈을 작성하고 컴파일하면 파이썬에서 이것을 불러와 사용할 수 있습니다.

다른 프로그램에서 import 명령을 통해 모듈을 불러와 사용할 수 있습니다. 파이썬은 이미 만들어진 수많은 라이브러리를 사용할 수 있습니다.
파이썬 표준 라이브러리 또한 동일한 방법을 통해 이용이 가능합니다. 일단, 표준 라이브러리를 불러와 사용하는 방법을 알아보도록 하겠습니다.


표준 모듈 사용 방법   

이미 만들어져 있는 파이썬에 내장된 표준라이브러리를 이용하는 방법입니다.

 

예제 ( module_using_sys.py로 저장하세요): 

# Filename : module_using_sys.py
import sys

print('The command line arguments are:')
for i in sys.argv:
    print(i)

print('\n\nThe PYTHONPATH is', sys.path)

▶ 실행결과 :

C:\Anaconda\envs\study_39\python.exe E:\python_study\module_using_sys.py
The command line arguments are:
E:\python_study\module_using_sys.py


The PYTHONPATH is ['E:\\python_study', 'E:\\python_study', 'C:\\Program Files\\JetBrains\\PyCharm 2022.3.2\\plugins\\python\\helpers\\pycharm_display', 'C:\\Anaconda\\envs\\study_39\\python39.zip', 'C:\\Anaconda\\envs\\study_39\\DLLs', 'C:\\Anaconda\\envs\\study_39\\lib', 'C:\\Anaconda\\envs\\study_39', 'C:\\Anaconda\\envs\\study_39\\lib\\site-packages', 'C:\\Anaconda\\envs\\study_39\\lib\\site-packages\\win32', 'C:\\Anaconda\\envs\\study_39\\lib\\site-packages\\win32\\lib', 'C:\\Anaconda\\envs\\study_39\\lib\\site-packages\\Pythonwin', 'C:\\Program Files\\JetBrains\\PyCharm 2022.3.2\\plugins\\python\\helpers\\pycharm_matplotlib_backend']

▶ 동작 원리 :
먼저, 표준 라이브러리 중 하나인 sys 모듈을 import 문을 통해 불러왔습니다. 이것은 단순히 파이썬에게 이 모듈을 앞으로 사용할 것이라고 알려주는 과정입니다. 여기서 사용된 sys 모듈은 파이썬 인터프리터와 인터프리터가 실행 중인 환경, 즉 시스템(system)에 관련된 기능들이 담겨 있습니다.

파이썬이 import sys 문을 실행하는 시점에서, 파이썬은 sys 모듈을 찾습니다. 이 경우에는 내장 모듈을 불러오는 것이므로, 파이썬이 이미 어디서 이것을 불러와야 하는지 알고 있습니다.

만약 그렇지 않은 경우, 예를 들어 파이썬으로 여러분이 직접 작성한 모듈인 경우 파이썬 인터프리터는 sys.path 변수에 정의된 디렉터리들에 해당 모듈이 있는지 검색합니다. 그러고 나서 모듈을 찾아내면, 그 모듈 내부에 적혀있는 명령들이 읽어 들여지게 되며 그다음부터 모듈이 사용가능하게 됩니다. 이러한 초기화 과정은 첫 번째로 모듈을 불러올 때만 이루어진다는 것을 기억하세요.

sys 모듈의 argv 변수를 불러올 때, 마침표를 이용하여 sys.argv 와 같이 접근합니다. 이와 같이 마침표를 이용함으로써 뒤에 온 이름이 sys 모듈에 존재한다는 것을 명시적으로 알려 주고, 또한 여러분의 프로그램에 사용될지 모를 argv라는 이름을 가진 다른 변수와 충돌이 일어나지 않도록 합니다.

sys.argv 변수는 문자열의 리스트입니다 (리스트에 대해서는 뒤 챕터에서 좀 더 자세히 다룰 것입니다). 좀 더 구체적으로 sys.argv 가 담고 있는 것은 "명령줄 인수"들의 리스트인데, 이것은 명령줄로부터 프로그램을 실행시킬 때 함께 넘어온 인수들을 담고 있는 것입니다.

여러분이 프로그램을 작성하고 실행할 때 IDE(Integrated Development Environment, 통합개발 환경을 이용하시는 경우, IDE 상에서 프로그램을 실행할 때 명령줄 인수를 지정하는 방법에 대해 알아보면,
"C:\Anaconda\envs\study_39\python.exe E:\python_study\module_using_sys.py"와 같이
"C:\Anaconda\envs\study_39\python.exe"를 사용하고 "E:\python_study\module_using_sys.py"를 인수를 넘겨주는 것입니다.
그러면 파이썬은 sys.argv 변수에 이것을 저장해 주며 프로그램에서 사용할 수 있도록 합니다.

이때, 여러분이 실행한 스크립트의 이름이 sys.argv리스트의 첫 번째 항목이 됨을 기억하세요.
즉, 이 경우 "E:\python_study\module_using_sys.py"가 sys.argv [0]에 해당합니다.
현재 우리는 windows에서 테스트를 하고 있는데, 시스템에 따라 sys.argv에 담기는 형태는 달라질 수 있습니다.

sys.path 변수에는 모듈을 불러올 때 찾게 되는 디렉터리들의 리스트가 담겨 있습니다. sys.path 변수의 첫 번째 항목이 현재 디렉터리인 것을 확인하세요. 이것은 현재 디렉터리 또한 sys.path의 일부임을 의미하며 이것은 PYTHONPATH 환경변수의 경우와도 같습니다. 즉, 여러분은 현재 디렉터리에 들어 있는 파이썬 모듈을 불러와 사용할 수 있는 것입니다. 그렇지 않은 경우, sys.path 에 지정된 디렉터리들 중 하나에 해당 모듈이 들어 있어야 합니다.

이때 현재 디렉터리란 프로그램을 실행할 때 위치하고 있는 디렉터리를 말합니다.
프로그램 내에서 현재 디렉터리가 어디인지 확인하려면

import os

print(os.getcwd())

를 실행하여 현재 디렉터리가 어디인지 확인할 수 있습니다.


바이트 컴파일된. pyc 파일에 대해서 

모듈을 불러오는 것은 상대적으로 무거운 작업이기 때문에, 파이썬은 약간의 트릭을 사용해서 좀 더 이 과정을 빠르게 수행할 수 있게 합니다. 그것은 바로 ".pyc"의 확장자를 가지는 "바이트 컴파일"된, 일종의 중간 단계의 파일을 만들어 두는 것입니다
이러한 ". pyc 파일"은 다른 프로그램에서 그 모듈을 다시 필요로 할 때 사용되며, 이 경우 모듈을 읽어 들이는 데 필요한 몇 가지 선행작업을 수행하지 않아도 되게 되어 더 빨리 모듈을 불러올 수 있습니다. 또한, 이렇게 바이트 컴파일된 파일은 플랫폼에 구애받지 않습니다. 그러나 Python 버전이 일치하지 않는 경우 동작하지 않으며, 하위 버전의 호환성도 없습니다.

". pyc 파일"은 순수한 인터프리터 언어도 아니고 순수한 컴파일 언어도 아닌 중간 단계라고 할 수 있습니다.

 

예제 ( pyc_compile.py로 저장하세요) : py파일을 pyc파일로 컴파일하는 방법

# Filename : pyc_compile.py
# py_compile 모듈 불러오기
import py_compile

# 파일 경로 입력
py_compile.compile("E:\python_study\module_using_sys.py")

▶ 실행결과 :
_pychache_라는 폴더가 생기고, 그 안에 pyc 파일이 생성됩니다.
E:\python_study\__pycache__\module_using_sys.cpython-39.pyc

 

예제 ( pyc_exe.py로 저장하세요) :  pyc파일 import 

# Filename : pyc_exe.py
# module_using_sys 모듈 불러오기
import module_using_sys

▶ 실행결과 :

C:\Anaconda\envs\study_39\python.exe E:\python_study\pyc_exe.py
The command line arguments are:
E:\python_study\pyc_compile.py


The PYTHONPATH is ['E:\\python_study', 'E:\\python_study', 'C:\\Program Files\\JetBrains\\PyCharm 2022.3.2\\plugins\\python\\helpers\\pycharm_display', 'C:\\Anaconda\\envs\\study_39\\python39.zip', 'C:\\Anaconda\\envs\\study_39\\DLLs', 'C:\\Anaconda\\envs\\study_39\\lib', 'C:\\Anaconda\\envs\\study_39', 'C:\\Anaconda\\envs\\study_39\\lib\\site-packages', 'C:\\Anaconda\\envs\\study_39\\lib\\site-packages\\win32', 'C:\\Anaconda\\envs\\study_39\\lib\\site-packages\\win32\\lib', 'C:\\Anaconda\\envs\\study_39\\lib\\site-packages\\Pythonwin', 'C:\\Program Files\\JetBrains\\PyCharm 2022.3.2\\plugins\\python\\helpers\\pycharm_matplotlib_backend']

▶ 동작 원리 :
import 되는 순간 바로 실행됩니다.

 

아나콘다 프롬프트 창에서 실행할 수도 있습니다.
window에서는 python을 연결프로그램으로 해놓으면 더블클릭으로 바로 실행할 수 있습니다.
위 예제는 실행 후 창이 바로 닫혀버려서 결과를 확인할 수는 없습니다.

또한 pyc파일을 다시 py파일로 변환하는 방법도 있다고 하는데 기회가 되면 알아보겠습니다.


이번 시간에는 모듈을 import 하는 방법과 pyc파일을 컴파일하는 방법을 보았습니다.
파이썬은 이미 만들어진 수많은 모듈을 import 해서 사용할 수 있다는 점이 큰 장점인 것 같습니다.

다음 시간에 모듈에 대한 내용 이어가겠습니다.

감사합니다. 

 

Do it! SQL을 찾아 주셔서 감사합니다. ♥ 댓글이 큰 힘이 됩니다.

 

728x90

댓글