파이썬 '파일 생성' 오류 발생

조회수 551회

문제 상황

파일(.xlsx) 을 생성하는 데 있어서 vscode 프로그램 상에서는 제대로 작동하지만 exe 파일을 통해서 실행하게 되면 파일 생성이 되지 않고 에러가 발생합니다. 폴더의 권한 문제인가해서 폴더 권한도 everyone 으로 변경했지만 에러가 해결되지 않습니다. 또한 경로문제인가 해서 경로도 절대경로로 설정했는데 .txt 파일은 정상적으로 생성이 되지만 .xlsx 파일은 생성이 되지 않습니다.도저히 이유를 모르겠습니다.

코드

import openpyxl
import os

from openpyxl import Workbook

dir = r"C:\Users\82107\Desktop\TEST"
dir = os.path.abspath(dir)
os.chdir(dir)
print("현재 dir : " + os.getcwd())

f = open(os.path.join(dir, 'test.txt'), "a", encoding='utf-8')
f.write("테스트입니다.")
f.close()
print("txt 성공")
print("파일 생성 위치 : " + os.path.abspath('test.txt'))

print("현재 dir : " + os.getcwd())
wb = Workbook()
wb.save(os.path.join(dir, 'test.xlsx'))
print("xlsx 성공")
print("파일 생성 위치 : " + os.path.abspath('test.xlsx'))

vscode 환경 실행

이미지 이미지

pyinstaller -F test.py 명령을 통해 생성한 test.exe 파일 실행(에러 발생)

이미지 이미지

  • 음~~ 그 exe를 관리자 권한으로 실행해 보셔요. 엽토군 2022.7.27 08:56
  • 말씀해주신 대로 진행했으나 같은 에러가 발생합니다. 며칠 동안 찾아보고 있는데 도저히 해결되지 않네요.. 혹시나 해서 파이썬을 지우고 다시 해봤지만 같은 에러가 발생합니다. 김정현 2022.7.27 12:03

2 답변

  • 이상하네요.

    우선, 질문하신 코드로 (사용자명만 바꾸고, TEST 디렉토리 만들고) 제 시스템에서 테스트해 보았고, 두가지 경우 모두 정상적으로 동작했습니다.

    저라면 procmon 툴로 로깅을 남겨서 실제로 어떤 파일패쓰에 접근하려고 하는것인지 확인해 보겠습니다. 이건 좀 어려울 수 있고.

    좀 돌아가는 것이지만, 해볼 수 있는 건,

    1. openpyxl 패키지의 버전을 바꾸어 본다. 파이썬을 삭제하고 할 필요 없이, 가상환경을 몇 개 만들어 놓고 패키지 버전을 다르게 설치해서, 각각의 환경에서 빌드를 해 보면 됩니다.
    2. 파일생성 디렉토리를 C:/test/ 같이 좀 간단한 경로를 사용해 본다.
    3. 여러가지 테스트를 하면서 코드가 좀 일관성이 없는데, 아주 간단하게 저장할 경로를 절대경로로 만들어서 변수에 저장해서, 그 변수로 저장할 때에도 사용하고, 로깅 남길때도 사용하도록 합니다. chdir 하면서 현재 실행 경로 바꾸고 하는 건 헷갈리기만 할 뿐입니다. 다 빼세요.

    질문자가 생성한 exe 파일을 업로드하여, 그 파일 실행테스트를 하였습니다.

    1. 82107 이란 사용자 생성하고, desktop 아래에 TEST 폴더 만들어 정상적으로 생성되는 것을 확인했습니다.
    2. Users 하위 디렉토리는 파일생성 권한이 좀 특이할 수도 있을 것 같은데, 아주 심플한 C:\TEST 에 대해서는 어떤지 궁금합니다.
    3. 에러메시지로 검색해 보았을 때, 생성하려는 엑셀파일을 엑셀이 열고 있을 때에 저런 증상이 나올 수 있다는 내용이 많이 나왔습니다.
    4. 엑셀이 아니라도, 다른 프로세스가 해당 파일핸들을 잡고 있거나, 아니면 백신 프로그램이 생성을 방지하고 있을 수도 있을 것 같습니다.
    5. open, write 방식으로 파일명만 에러가 발생했던 text.xlsx 로 하여 만들어보면 어떤 결과가 나올지도 궁금합니다. (4의 경우라면, 이렇게 해도 에러가 발생할 것 같습니다.)
    • 답변 감사합니다! 말씀해주신 procmon 으로 로그를 확인했는데 패쓰의 문제는 아닌 것 같은데 로그를 봐도 어떤게 문제인지 잘 모르겠습니다. 해당 부분은 밑에 이미지를 첨부해놨습니다. 김정현 2022.7.28 21:04
    • exe 파일을 첨부해서 질문을 해 보시겠어요? 파일첨부가 될래나? 다운받아서 제 시스템에서 해당 디렉토리 만들고 테스트해 볼게요. nowp 2022.7.28 21:29
    • https://github.com/Juunghyeon/TIL/blob/32a1423ec5af6cfecb3f831294d31825a8eac043/test.exe 여기에 첨부파일 올려놓았습니다! 김정현 2022.7.28 21:45
    • 사용자 디렉토리라서 사용자가 없는 상태에서 억지로 디렉토리를 만들어 테스트하기가 어렵네요. 저장디렉토리를 C:\TEST 로 해서 한번 테스트 해 보시고, 다시 올려 주시겠어요? nowp 2022.7.28 22:48
    • 사용자 82107을 만들고, TEST 디렉토리를 만들어서, 올려주신 exe 파일을 실행해 보았습니다. 정상적으로 xlsx 까지 생성됩니다. nowp 2022.7.29 09:49
    • 아하.. 제 컴퓨터 문제인 것 같네요! 정말 감사합니다:) 김정현 2022.7.29 16:08
  • daewon 님께서 말씀해주신 procmon 프로그램으로 로그를 남겨서 확인해봤습니다. test.xlsx 파일에 대해서는 다음과 같은 로그가 남았습니다. 이미지

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)