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에 따라 다르게 얻어지는걸 확인 할 수 있습니다.
실행결과 2 : get_path.exe
그런데 pyinstaller로 .pyw 를 .exe 로 빌드해서 윈도우 환경에서 .exe 파일을 실행하면
os.path의 리턴값들이 다 .exe가 임시로 실행되는 _MEI????? 어쩌고 temp 경로를 가르키고
os.getcwd 리턴값만 실제 실행된 디렉토리 경로를 얻을 수 있었습니다.
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()
'Programming > Python' 카테고리의 다른 글
이미지 테두리 테둘러 (Image Outliner) v0.2.3 배포 (0) | 2023.10.11 |
---|---|
이미지 테두리 테둘러 (Image Outliner) v0.2.2 배포 (0) | 2023.06.14 |
이미지 테두리 테둘러 (Image Outliner) v0.2.1 배포 (0) | 2023.06.13 |