본문 바로가기
Study/Python

[Python] PyCharm에서 main.py

by p-jiho 2023. 10. 22.

예전에 교수님께서 jupyter 말고 다른 에디터에서도 코딩을 할 필요가 있다고 하셨다.

나는 jupyter로 파이썬을 배웠고 딱히 불편한 점은 없었다. 그래서 매번 jupyter만 썼다. 물론 파이참을 안쓴 건 아니지만 자주 쓰진 않았다.

그런데 전문가가 되려면 jupyter가 아닌 다른 에디터도 쓰는 것이 맞다는 생각이 들었다.

그래서 요즘 PyCharm을 쓰려고 노력중이다.

 

PyCharm에서 새로운 프로젝트를 실행하면 나오는게 main.py이다.

예전에 나는 갑자기 나오는 main.py가 당황스러웠고, 예시인가보다 하며 그냥 지웠다.

한번 궁금한 적이 있어 main.py가 의미하는 것을 공부해보았었다.

 

main.py은 메인프로그램을 의미한다.

# This is a sample Python script.

# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.


def print_hi(name):
    # Use a breakpoint in the code line below to debug your script.
    print(f'Hi, {name}')  # Press Ctrl+F8 to toggle the breakpoint.


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    print_hi('PyCharm')

# See PyCharm help at https://www.jetbrains.com/help/pycharm/

처음 main.py를 보면 이렇게 구성이 되어있다. 첫줄에서 의미한 바와 같이 이 코드는 샘플코드이다.

def는 함수를 생성하는 것이다. 그래서 prain_hi("PyCharm")을 실행하면 결과는 Hi, PyCharm으로 나온다.

여기까지는 파이썬을 좀만 써본 사람이면 알 수 있고, 그닥 이해가 필요한 부분도 아니다.

 

오늘은 if __name__ ==  '__main__' 의 의미가 무엇인지 알아볼 것이다.

말그대로 if 문이다. __name__이 __main__이면 실행하라는 뜻이다.

일단 __main__ 이 무엇인지 알아보자.

__main__은 메인프로그램이라는 것이다. __main__은 entry point 즉, 시작점이다.

어플리케이션의 최상위 파일이 __main__인 것이다.

그리고 __name__은 내장함수이다. 모듈의 이름을 이야기한다. 그래서 if문은 모듈로써가 아닌 메인프로그램으로써 실행하는 것인지를 묻는 것이다.

말로만 하면 이해가 잘 되지 않으니 예시를 몇가지 보자.

 

# first.py
def name():
    print(f"name : {__name__}")
    
name()


#### output
# name : __main__

main.py의 이름을 헷갈리기 때문에 first로 변경해주었다.

first.py은 메인프로그램이고 위와 같다.

실행했을 때 값은 __main__으로 나온다. 메인프로그램을 돌렸기 때문에 __main__으로 나오는 것이다.

 

그럼 first.py를 모듈로 사용해 second.py에서 사용해보자.

# second.py
import first

first.name()


### output
# name : first
# name : first

output은 이렇게 두번 나온다.

first를 모듈로 받아오면서 first에 있던 모든 함수가 실행이 된다. 그래서 첫번째 줄의 name : first는 first.py를 실행하면서 나온 값이다. 그리고 두번째 줄의 name : first는 second.py를 실행하면서 나온 값이다.

first.py를 실행했을 때는 메인프로그램으로서 실행했기 때문에 __main__으로 나온다. 하지만 second.py로 실행했을 때 first.py는 모듈이 되므로 first로 나오는 것이다.

 

또 예시를 만들어보자.

# first.py
def name():
    print(f"name : {__name__}")

if __name__ == "__main__":
    name()

print("실행")

### output
# name : __main__
# 실행

first.py를 if문을 넣어서 변경해보았다.

그리고 second.py를 실행해보자.

# second.py

import first

first.name()
print(__name__)

### output
# 실행
# name : first
# __main__

아까와 달리 name : first가 하나만 나왔다. first.py가 메인프로그램으로써 쓰인 것이 아니라 모듈로서 쓰인 것이고, 그렇기 때문에 if문 안의 함수는 실행되지 않을 것이다.

하지만 first.py의 마지막 줄의 print("실행")은 그대로 실행이 된다.

위 모든 것이 import first를 쓰는 순간 이루어지는 것이다.

그리고 first.name()을 통해 first.py가 메인프로그램이 아닌 모듈로 사용이 되었으므로 first로 출력이 된다.

그리고 마지막 print(__name__) 함수는 __main__으로 출력이 된다.

왜 second가 아닌 __main__으로 출력이 되냐면 아까 말했듯이 __main__은 어플리케이션의 최상위 즉, 시작점이다.

second를 실행했으므로 second는 시작점 즉, entry point가 되는 것이다. 즉, second를 메인 프로그램으로 사용한 것이다.

내가 이해한 바를 한마디로 설명하면 if __name__ == "__main__"은 import 즉, 모듈로 받아올때는 실행하지 않고, 직접적으로 실행한 파일일 때만 실행하라는 뜻이다.

 

처음에 이 개념이 정말 헷갈렸다.

너무 안쓰다보니 시간 지나면 또 까먹고 시간 지나면 또 까먹고...

하고 싶은 프로젝트가 있는데 대회나갈 건 아니고 그냥 오늘 혼자 공부하려고 PyCharm의 새로운 프로젝트를 생성했다가 main.py를 보게 되었다.

또 까먹을까봐 그리고 내가 이해하고 있는 것이 맞는지 확인하고자 여러 정보를 찾아보며 생각을 정리를 해보았고, 내가 이해한대로 써보았다.

 

틀린 부분이 있다면 댓글로 지적해주시면 감사하겠습니다.

 

 

 

'Study > Python' 카테고리의 다른 글

[서울시 기온 예측 해커톤] Neuralprophet  (1) 2024.01.05
[Python] 시각화 3. Geocoding  (1) 2023.12.18
[Python] 시각화 2. Folium  (1) 2023.12.17
[Python] 시각화 1. Pyechart  (0) 2023.11.07