달나라 노트

Python Basic : __name__ (직접 실행/패키지 실행 구분하기) 본문

Python/Python Basic

Python Basic : __name__ (직접 실행/패키지 실행 구분하기)

CosmosProject 2021. 6. 26. 18:35
728x90
반응형

 

 

 

 

 

 

python의 내장변수 중 __name__이라는 변수는 해당 python 파일을 직접 실행시키는지 library로 import해서 실행시키는지에 따라 값이 달라집니다.

 

직접 실행할 경우 -> __name__ == '__main__'

library로 import되어 실행된 경우 -> __name__ == '파일명'

 

 

 

# name_test.py

print(__name__)


-- Result
__main__

name_test.py 파일을 직접 실행한 경우 __name__이라는 내장변수에는 __main__이라는 값이 저장됩니다.

위 예시의 결과에서 알수있죠.

 

 

# final.py

import name_test


-- Result
name_test

final.py 에서 test.py를 import했습니다.

그리고 final.py를 실행시키면 name_test라는 텍스트가 출력됩니다.

 

import를 하는 순간 name_test가 한번 실행된것이고,

name_test.py에 있는 print(__name__) 구문이 실행되면서 name_test라는 텍스트가 출력되었다고 볼 수 있습니다.

따라서 name_test.py가 import된 채로 실행되면 name_test.py의 내장변수 __name__에는 해당 파일의 이름이 저장된다는걸 알 수 있죠.

 

 

 

 

 

 

 

 

 

 

 

좀 더 확실하게 보기 위해 코드를 약간 바꿔봅시다.

 

name_test.py

if __name__ == '__main__':
    print('__name__ : {}'.format(__name__))
    print('name_test.py is executed by itself.')
elif __name__ == 'name_test':
    print('__name__ : {}'.format(__name__))
    print('name_test.py is imported in another file.')


-- Result
__name__ : __main__
name_test.py is executed by itself.

 

name_test.py 파일의 코드를 위처럼 바꿨고,

name_test.py를 직접 실행하면 __name__ == '__main__' 조건이 True가 되면서 if에 있는 코드블록이 실행됩니다.

 

 

 

 

 

# final.py

import name_test


-- Result
__name__ : name_test
name_test.py is imported in another file.

 

이번에도 name_test.py final.py에서 import해봅시다.

이때 name_test __name__ 변수는 import되었으므로 __name__ 변수에는 파일명인 name_test라는 값이 저장됩니다.

 

따라서 name_test.py if가 아닌 elif에 있는 코드블록이 실행되죠.

 

 

 

 

 

 

 

 

 

 

 

 

# name_test.py



-- Result

 

# final.py

import name_test

print(__name__) # --> final.py의 __name__ 변수값 출력
print(name_test.__name__) # --> name_test.py의 __name__ 변수값 출력


-- Result
__main__
name_test

 

위 예시는 test.py를 그냥 공백으로 두고 final.py에서 test.py를 import한 것입니다.

 

그리고 final.py에서는 final.py의 __name__변수와 name_test.py의 __name__ 변수값을 출력하고있죠.

 

final.py가 직접 실행되었으므로 final.py __name__ 변수는 __main__으로 출력되고,

name_test.py는 import되었으므로 name_test.py __name__ 변수(name_test.__name__)는 파일명(name_test)으로 출력되는걸 볼 수 있습니다.

 

 

 

 

 

 

 

# name_test.py

...

if __name__ == '__main__':
    # something you want to run

 

__name__ 내장변수는 보통 위와 같은 조건을 사용해서

python 파일이 직접 실행될때만 발동되는 코드블록을 만들 때 사용됩니다.

 

 

 

 

 

 

 

 

 

 

728x90
반응형
Comments