python Tkinter로 간단한 툴을 구현하다가 pyinstaller로 생성한 .exe 파일은
os.path 리턴값이 기대와 다른걸 처음 알게되어 한참을 헤맸습니다.

.pyw 와 .exe 실행시 os.path 결과값이 뭐가 어떻게 다른지 삽질을 해봤습니다.

 

 

실행결과 1 : python get_path.pyw 

첫번째는 python get_path.pyw 으로 .pyw를 실시간으로 바로 실행하는 경우에는
os.path 와 os.getcwd 리턴값이 각 API에 따라 다르게 얻어지는걸 확인 할 수 있습니다.

get_path.pyw
0.00MB

 

실행결과 2 : get_path.exe

그런데 pyinstaller로 .pyw 를 .exe 로 빌드해서 윈도우 환경에서 .exe 파일을 실행하면
os.path의 리턴값들이 다 .exe가 임시로 실행되는 _MEI????? 어쩌고 temp 경로를 가르키고
os.getcwd 리턴값만 실제 실행된 디렉토리 경로를 얻을 수 있었습니다.

get_path.exe
9.47MB

 

python get_path.pyw 으로 코드를 실행하는 경우라면 os.path를 API에 맞게 사용할 수 있지만
외부 배포용으로 .exe 로 실행파일을 만들어야 하는 경우에는 os.path의 API 들이
그 의미대로 리턴되지 않는 점 확인이 필요하여 예제를 올려봅니다.

소스 : get_path.pyw

import os
import tkinter.font
from tkinter import *

def main():
    list_text  = [ "__file__",
                  "os.path.abspath(__file__)}",
                  "os.path.realpath(__file__)}",
                  "os.path.dirname(__file__)}",
                  "os.getcwd()}"
                 ]
    list_cmd   = [ f"{__file__}",
                   f"{os.path.abspath(__file__)}",
                   f"{os.path.realpath(__file__)}",
                   f"{os.path.dirname(__file__)}",
                   f"{os.getcwd()}"
                  ]

    list_label = []
    list_entry = []
    for i in range(len(list_cmd)):
        list_label.append(Label(root, text=list_text[i]))
        list_entry.append(Entry(root, relief='solid', width=60, font=font))
        list_label[i].grid(row=i, column=0, sticky = W)
        list_entry[i].grid(row=i, column=1)
        list_entry[i].insert(0, list_cmd[i])
    
    list_entry[len(list_entry)-1].configure(bg='yellow')

root = Tk()
root.geometry('600x140')
font = tkinter.font.Font(family='Consolas', size=9)

if __name__ == "__main__":
	main()

root.mainloop()

+ Recent posts