초간단 아날로그 시계 만들기 - GPT를 이용한 코딩 연습 - 6부(배포판 만들기)

2024. 10. 24. 12:31코딩 연습/아날로그 시계 만들기

이전까진 파이썬 코드를 디버그 실행으로 실행시켰다. 프로그램을 실제로 사용하려면 독립 실행 파일로 만들어야한다.

이를 위해 GPT에게 물어본다.

 

 

위 답변과 같이 cmd를 띄워  pip install pyinstaller 를 실행하면 알아서 설치한다.

 

설치가 끝나면 cmd에서 프로젝트 파일이 있는 파일 경로(파이썬 스크립트가 있는 폴더)로 이동하여 위의 명령어를 참조하여 cmd에 입력한다.

참고로 나는 윈도우 11 23H2 버전을 사용중인데 윈도우 탐색기에서 마우스 우클릭 메뉴를 통해 해당 경로에서 터미널을 바로 띄울 수 있었다. 아니면 cd 명령어를 사용하여 경로를 바꾸자. 띄어쓰기가 있으면 반드시 "쌍따옴표"로 감싸줘야 한다. 예를 들면 cd "c:\사용자 경로\사용자 경로"  이런식이다.

 

 

설명대로 파이썬 코드가 있던 폴더 안에 dist 폴더가 생성됐고 그 안에 실행파일이 생겼다.

 

실행해보니 잘 작동한다.

 

 

그런데 아이콘이 깃털 모양이다. PyInstaller 라이브러리 기본값으로 자동으로 지정되는 듯한데 바꾸고 싶다. 역시 GPT에게 물어보자.

 

준비물로 아이콘 그림이 있어야한다. 또 그림을 ico 형식으로 바꿔야한다.

나는 어도비를 구독 중인데 여기도 인공지능을 이용해 그림을 그려주는 기능이 있다. 어렵지 않게 시계 모양의 아이콘을 만들었는데, 영감만 얻고 내 블로그 아이콘에 맞춰 꾸미는 게 나을 듯해서 다시 그렸다.

 

이 모양을 시계 아이콘으로 쓸 것이다. 그런데 포토샵에서 .ico 으로 저장할 수 없다. 플러그인을 설치하면 된다는데 링크를 들어가보니 이제는 막혀있다.

좀 찾아보니 GIMP라는 유명한 포토샵 대응 프로그램에서 ico 파일로 저장할 수 있다. 이와 관련한 건 다른 글에 적도록 하겠다.

 

 

다시 GPT의 말대로 따라해본다. 준비해둔 아이콘 파일을 파이썬 경로에 두고 명령어를 입력했다.

위 사진처럼 아이콘에 띄어쓰기가 있으면 해당 파일을 찾을 수 없다고 나온다.

띄어쓰기가 있다면 "쌍따옴표"로 묶어준다.

 

잘 작동한다. 그런데 아래처럼 프로그램 아이콘만 바뀌었다.

작업표시줄 아이콘은 바뀌지 않았다. 또 프로그램 좌측 상단을 보면 아이콘이 있는데 이것도 깃털모양이다.

 

다시 GPT에게 물어본다.

 

프로그램 좌측 상단 아이콘은 코드로 해결하고, 작업 표시줄 아이콘도 똑같은 코드로 해결 하는 듯 하다. 그래서 일단 시키는대로 해봤다.

오류가 난다. 오류 내용을 보니 ~~.ico 파일을 찾을 수 없는 듯 했다. 그래서 exe 실행파일이 있는 폴더에 아이콘 파일을 복사하니 잘 된다.

그런데 실행파일과 아이콘 파일을 같이 움직이는 건 아닌 듯하다. 다시 GPT에게 물어보자.

GPT가 답을 해줬는데 

        # 실행 파일에 아이콘 포함시키기 위해 경로 설정
        if hasattr(sys, '_MEIPASS'):
            # PyInstaller로 패키징된 경우 '_MEIPASS' 경로 사용
            icon_path = os.path.join(sys._MEIPASS, "your_icon.ico")
        else:
            # 개발 중일 때는 현재 디렉토리의 아이콘 파일 사용
            icon_path = "your_icon.ico"

 

이렇게 바꾸란다. 내용을 보니 좀 어렵지만 그냥 그렇게 바꾼다. 

참고로 "_MEIPASS"는 PyInstaller 라이브러리를 통매 만들어진 exe가 실행될 때 임시로 사용되는 경로라고 한다. PyInstaller로 만든 exe를 실행하면 sys 속성에 _MEIPASS 가 있을 것이고 그럴 경우 your_icon.ico 이 그 경로에 포함되어 있을 테니 icon_path를 이 경로로 지정한다.

실행해봤다. 그런데 마찬가지로 오류가 난다. 한번 더 GPT에게 추궁하니 CMD에서 

pyinstaller --onefile --noconsole --icon=your_icon.ico --add-data "your_icon.ico;." clock_app.py

이렇게 --add-data를 쳐서 아이콘 파일을 포함시켜야한다.(그래야 _MEIPASS에 your_icon.ico 파일이 있을 것이다.) 참고로 .ico옆에 ";." 도 반드시 쳐줘야 오류가 없다.

 

탐색기에서 보이는 아이콘

 

프로그램 창 좌측 상단에 뜨는 아이콘

 

윈도우 작업표시줄에 보이는 아이콘

단독 실행 파일로 실행시켰는데 오류없이 잘 실행되며 아이콘도 다 잘 나온다. 다만 위의 예시에도 알 수 있듯 어두운 배경 속에 진한 파랑색은 눈에 띄지 않는다. 아이콘을 만들 때는 이를 고려하여 만들자. 괜히 일을 두 번 해야 한다.

다시 아이콘 속을 하얀색으로 채워서 만들었다.

완성이다. 라고 생각했지만 아래의 그림을 보자.

처음 단독 실행파일을 실행시켜 프로그램을 실행시키면 뒤의 배경 사진이 없다. 옵션에서 사진을 넣으면 잘 작동하지만 초기 값으로 사진이 들어가 있지 않다. 물론 사진이 없는 지금 상태도 초기 값으로 좋은 상태일 수도 있지만 원래 의도했던 것은 아니다. 

또 아쉬운 점은 사진 값이 들어가면 실행파일 폴더 안에 config.json 파일이 생긴다. 이 파일에 프로그램이 참조할 사진 경로가 저장되기 때문인데 사용자가 모를만한 파일이 생기는 것은 좋지 않다.

 

일단 오늘은 여기까지 하고 다음엔 이를 수정해 보도록 하겠다.