카테고리 없음

Q. FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\User\\AppData\\Local\\Temp\\_MEI146082\\soynlp\\noun/frequent_enrolled_josa.txt'[11696] Failed to execute script 'main' due to unhandled exception! 에러 해결방법은?

makeitworth 2021. 12. 21. 17:00

환경

Windows 10 Pro

python 3.8.12

 

IDE - Visual Studio Code

에러 발생 상황

파이썬으로 작성한 자연어 처리 프로그램을 pyinstaller를 통해서 exe 실행파일로 만들었다.

konlpy와 soynlp로 형태소 분석, 명사 추출 등을 수행하는 전처리 과정이 포함된 프로그램이다. 

여러가지 지저분한 .dll 파일들이 포함되는 옵션에서는 실행파일이 잘 실행됨을 확인하였다.

그 다음에 --F 옵션을 활용하여 one-file로 만들고, 실행파일이 잘 돌아가는지 테스트하는데 에러가 발생했다.

에러 메세지

 

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\User\\AppData\\Local\\Temp\\_MEI146082\\soynlp\\noun/frequent_enrolled_josa.txt'[11696] Failed to execute script 'main' due to unhandled exception!

 

해결

 

구글에서 해당 에러를 검색했을 때 뜨는 여러 가지 포스팅을 살펴보았는데, 다음 블로그가 제일 이해하기 쉽게 잘 정리해주신 것 같다. 그런데 처음에는 내가 블로그의 내용을 제대로 이해를 하지 못해서 문제에 제대로 접근하지 못했다.

 

https://kwonkyo.tistory.com/528

 

Pyinstaller로 변환한 exe 파일의 실행 경로 찾기

Pyinstaller로 파이선 스크립트를 실행파일로 변환했을 때 겪을 수 있는 경로 문제에 대한 이야기입니다. 프로그램 동작중에 데이터 파일을 가져오거나 저장해야 할 일이 있을 때 파이썬 스크립트

kwonkyo.tistory.com

 

내가 사용하는 모듈이 내부에서 .txt 같은 static file들을 활용할 때가 있다. 나는 자연어처리 관련 모듈을 사용했으므로, 모듈 내에서 미리 정의한 불용어 사전이나 품사 사전같은 것을 .txt 파일 저장한 다음 필요할 때 블러와서 활용한다.

 

code를 보면, 예약어 "__file__"을 사용하여 현재 경로를 받아오고 이를 바탕으로 static file이 저장된 경로를 불러와서 활용하게 되는데, 원파일로 패키징을 할 경우 에러 메세지에 나타난 임시 경로를 만들고, 그곳이 현재 경로로 할당되는 것 같다.

 

경로를 고쳐주면 해결될 것 같아서, 

https://dineshkumarkb.com/tech/package-data-files-to-pyinstaller-binaries/

 

Package Data Files to pyinstaller Binaries – Dock2Learn

Introduction I am sure most of you would have used pyinstaller for generating executables. This article does not cover what a pyinstaller is. However, the focus of the article will…

dock2learn.com

위 포스팅을 참고하여 경로 잡는 코드를 아래와 같이 바꿔줬는데, 해결이 안되었다.

getattr(sys, '_MEIPASS', os.path.abspath(os.path.dirname(__file__)))

 

업계 종사하는 친구에게 help를 구했더니, txt 문서에 있는 텍스트 정도면 그냥 코드 내에 넣어서 해결하는게 제일 간단하다고.

 

그래서 텍스트를 리스트로 저장해버려서 해결했다.

이 에러 메세지를 해결하고 나면, 몇 가지 다른 에러 메세지가 나타났으나, 결국 모두 텍스트 파일을 불러오지 못하는 오류였고, 같은 방식으로 모두 해결하였다.  

그런데 이미지 파일을 활용하는 경우는 코드 내 복사 붙여넣기로 해결할 수 없으므로, 위의 블로그 포스트처럼 pyinstaller 코드를 실행할 때, spec 파일에 static files를 추가시키고, 경로를 불러오는 코드들의 경우 경로를 일일이 프린트해서 확인해봐야할 거 같다.

 

 

그 밖에 참고한 포스트들.

 

https://stackoverflow.com/questions/55032830/os-path-points-to-incorrect-location-with-pyinstaller-in-multiple-file-imports

 

os.path points to incorrect location with Pyinstaller in multiple file imports

I have two python files main.py and aux.py located in the same directory. main.py contains the following code: import aux print "aux imported" aux.py contains the following code: import os

stackoverflow.com

https://dineshkumarkb.com/tech/package-data-files-to-pyinstaller-binaries/

 

Package Data Files to pyinstaller Binaries – Dock2Learn

Introduction I am sure most of you would have used pyinstaller for generating executables. This article does not cover what a pyinstaller is. However, the focus of the article will…

dock2learn.com

https://python.plainenglish.io/packaging-data-files-to-pyinstaller-binaries-6ed63aa20538

 

Package Data Files to pyinstaller Binaries

Resolve file not found errors in pyinstaller

python.plainenglish.io