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

#022 파이썬 기초 - 모듈 2편 (Python Module Part 2)

by DoitSQL 2023. 3. 4.
728x90

Python기초강의강좌, 파이썬기초강의강좌, from ~ import, name 속성, module, 아나콘다 프롬프트 실행 디렉터리변경

#022 파이썬 기초 - 모듈 2편 (Python Module Part 2)   

Python Module Part 2

지난 시간에 이어 파이썬 모듈 공부 계속합니다.


 

from … import 문   

지난 시간에 import sys 하고 나서 sys.argv를 사용하였는데요.
매번 "sys." 를 입력하지 않고서도 "argv" 변수를 프로그램에서 곧바로 불러와서 사용할 수도 있습니다. 이런 경우, from sys import argv와 같은 구문을 이용합니다. 이렇게 하면 "sys."식별자를 생략하고 "argv" 단독으로 사용할 수 있습니다.

하지만 식별자 이름 간의 충돌을 피하고 프로그램을 좀 더 읽기 쉽게 작성하기 위해서, 가능하면 이렇게 사용하는 것을 피하고 import 문을 사용하기를 권합니다.

 

예제

from math import sqrt
print ("Square root of 16 is", sqrt(16))

위와 같이 사용할 수 있습니다. (권장은 하지 않습니다.)


모듈의 name 속성   

모든 모듈은 이름을 갖고 있으며, 모듈 내에 포함된 명령을 통해 모듈의 이름을 알아올 수 있습니다. 이 속성은 현재 모듈이 불러들여져서 사용되고 있는지 아니면 인터프리터에서 곧바로 실행된 것인지를 구분하는데 편리하게 사용될 수 있습니다.

이전에 알아보았지만, 모듈 내부의 코드는 모듈이 첫 번째로 불러들여졌을 때 실행되게 됩니다. 이러한 속성을 통해 모듈이 외부로부터 불러들여졌을 때와 곧바로 실행되었을 때에 각각 다르게 처리하도록 할 수 있습니다.

이를 위해 name 속성을 사용합니다.

 

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

# Filename : module_using_name.py
if __name__ == '__main__':
    print('This program is being run by itself')
else:
    print('I am being imported from another module')

▶ 실행결과 :

C:\Anaconda\envs\study_39\python.exe E:\python_study\module_using_name.py
This program is being run by itself

 

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

# Filename : module_using_name_import.py
import module_using_name

▶ 실행결과 :

C:\Anaconda\envs\study_39\python.exe E:\python_study\module_using_name_import.py
I am being imported from another module

▶ 동작 원리 : 예제 1과 예제 2
모든 파이썬 모듈은 name 속성을 가지고 있습니다. 만약 그 이름이 'main'일 경우, 이것은 모듈이 사용자로부터 직접 실행된 것임을 의미하며 따라서 이에 맞는 적절한 처리를 해 줄 수 있습니다.
"예제 1"에서 실행된 것은 'main'을 이름으로 가집니다. 반면, "예제 2"에서 import로 실행된 것은 'main'이 아닙니다. 이처럼 name 속성으로 구별이 됩니다.


새로운 모듈 작성하기   

모듈을 작성하는 것은 쉽습니다. 사실은 여러분이 지금까지 해 왔던 것과 별 다를 게 없습니다! 왜냐하면 모든 파이썬 프로그램은 곧 모듈이기 때문입니다. 즉 ".py" 확장자를 가진 이름으로 저장되기만 하면 됩니다. 아래 예제를 통해 이에 대해 좀 더 분명하게 알 수 있을 것입니다.

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

# Filename : mymodule.py
def say_hi():
    print('Hi, this is mymodule speaking.')

__version__ = '0.1'

위 예제는 모듈 예시입니다. 보시는 바와 같이, 지금까지 작성해 왔던 파이썬 프로그램들에 비해 별다른 특별한 것이 없습니다. 다음으로는 다른 파이썬 프로그램으로부터 이 모듈을 불러와서 사용하는 방법을 알아보겠습니다.

아래 예제를 실행시키기 전에, 위 예제 프로그램 파일이 아래 예제 프로그램과 같은 디렉터리에 있거나 혹은 sys.path 중 하나에 있어야 제대로 불러올 수 있음을 기억하세요.

 

모듈 불러오기 예제 ( mymodule_demo.py로 저장하세요):   

# Filename : mymodule_demo.py
import mymodule

mymodule.say_hi()
print('Version', mymodule.__version__)

▶ 실행결과 :

C:\Anaconda\envs\study_39\python.exe E:\python_study\mymodule_demo.py
Hi, this is mymodule speaking.
Version 0.1

▶ 동작 원리 :
모듈의 구성 요소에 접근하는 데에도 앞서 알아보았던 것과 동일하게 마침표를 이용하여 접근합니다. 파이썬은 같은 일을 하는 데 같은 표기법을 사용합니다. 따라서 뭔가 새로운 일을 하기 위해 새로운 것을 또 배울 필요가 없습니다. 프로그래머들은 이런 것들이 파이썬 특유의 '파이썬스러운' 느낌을 준다고 말합니다.


from.. import 구문을 사용하는 예제(`mymodule_demo2.py`로 저장하세요):입 력   

# Filename : mymodule_demo2.py
from mymodule import say_hi, __version__

say_hi()
print('Version', __version__)

▶ 실행결과 :

C:\Anaconda\envs\study_39\python.exe E:\python_study\mymodule_demo2.py
Hi, this is mymodule speaking.
Version 0.1

mymodule_demo2.py를 실행한 결과는 mymodule_demo.py의 결과와 같습니다.

만약 mymodule을 불러올 때 version이라는 이름이 이미 모듈에 선언되어 있었다면, 충돌이 일어날 것입니다. 사실 이 경우는 각 모듈의 버전을 이 이름으로 주로 선언해 두기 때문에 실제로 자주 일어나는 일이기도 합니다. 따라서, 프로그램이 조금 길어지는 한이 있더라도 웬만하면 import 문을 이용하여 프로그램을 작성하기를 권합니다.

아래와 같이 사용할 수도 있습니다:

from mymodule import *

이것은 say_hi’와 같이 모듈에 포함된 모든 공개된 이름들을 불러옵니다. 그러나 밑줄 두 개로 시작하는 "version"과 같은 이름들은 불러오지 않습니다.

 

※ 주의  가능하면 "from mymodule import *"처럼 사용하는 것을 피하시기 바랍니다.


아나콘다 프롬프트 실행 디렉터리변경   

아나콘다 프롬프트에서 인터프리터를 이용해 테스트를 하려면, 아나콘다 프롬프트를 ". py" 소스가 있는 디렉터리에서 실행하여야 합니다. 그 방법을 알아봅니다.

속성변경

메뉴의 아나콘다 프롬프트에서 오른쪽 마우스 클릭 후 속성을 선택합니다.

 

시작위치

시작위치를 파이썬 소스가 있는 폴더로 변경해 줍니다.

 

이후에 실행하면 시작위치가 변경됩니다.

쉘

 

이후  conda activate study_39로 가상환경을 활성화하고

python 실행해서 파이썬 쉘에서 테스트해 볼 수 있습니다.

쉘 실행


모듈 두 번째 학습을 마칩니다.

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

감사합니다.

 

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

 

728x90

댓글