본문 바로가기
컴퓨터

pyinstaller FileNotFoundError: [Errno 2] No such file or directory: [16716] Failed to execute script 오류

by skyjwoo 2020. 12. 6.
728x90
반응형

pyinstaller로 .py 파일을 .exe로 빌드하려다 오류가 발생했다. 

제목에도 나와있는 것처럼 위와 같은 문제가 발생했을 때 어떻게 해결했는 지 공유하고자 한다. 

간단히 .spec 파일을 수정해주고, .spec 파일로 빌드해주면 된다.

 

처음에 pyinstaller 파일이름.py 로 빌드를 하면 .spec 파일이 생성될 것이다.

이 .spec파일을 문서 편집기 등으로 열면 다음과 같은 코드가 나오는데(일부만 뽑았다.) 이 중 datas 부분에 빌드 과정에서 빠진 파일과 코드에서 요구하는 폴더 구조를 넣어주면 된다.

a = Analysis(['ui.py'],
             pathex=['C:\\Users\\YJW2\\Documents\\NLP\\poetry_rhymer'],
             binaries=[],
             datas=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

필자의 경우 'gui.ui' 파일이 없었고, 이 파일은 pyinstaller로 변환하려 했던 파일인 내파일과 같은 디렉토리에 존재했다. 따라서 이 정보를 datas에 넣어주면 빌드시에 해당 파일과 그 파일이 어떤 폴더에 있어야 할 지에 맞게 폴더를 구성해 준다. 

 

datas에 입력하는 구조는 튜플 형식으로 입력해주면 되는데, ("파일이름.확장자", "폴더명(또는 폴더 구조)")를 넣어주면 된다. 만일 필요한 파일이 2개면 튜플 2개를 datas 리스트 안에 넣어주면 된다. 

 

필자는 pyinstaller에서 빌드할 파일과 같은 디렉토리에 필요한 파일이 있었기에 다음과 같이 튜플을 추가해 주었다. 

...
datas = [('./gui.ui', '.')]
...

 '.'은 빌드할 파일과 같은 폴더에 있다는 것을 말한다. 만일 내가 빌드할 파일이름이 'main.py'이고, 이 파일이 다음과 같은 구조를 갖는다고 해보자.

project

|_gui.ui

|_main.py
|_foo
  |_mid
    |_bar.txt

    |_test1.txt

    |_a.ui

 

여기서 foo/mid 내 모든 txt파일들을 빌드시에 추가하고 싶다면 다음과 같은 값을 추가할 수 있다. 

...
datas = [('./gui.ui','.'),('./foo/mid','./foo/mid/*.txt')]
...

또 txt파일 뿐만 아니라 a.ui까지 포함하여 폴더 째로 추가시킬 수도 있다.

...
datas = [('./gui.ui','.'),('./foo/mid','./foo/mid')]
...

 

spec 파일에 대한 다른 정보들은 pyinstaller document에서 더 찾아볼 수 있다.

pyinstaller.readthedocs.io/en/stable/spec-files.html

 

Using Spec Files — PyInstaller 4.1 documentation

the first thing PyInstaller does is to build a spec (specification) file myscript.spec. That file is stored in the --specpath= directory, by default the current directory. The spec file tells PyInstaller how to process your script. It encodes the script na

pyinstaller.readthedocs.io

<추가>

pyinstaller로 만든 .exe 파일이 갑자기 종료됐을 때, 로그를 알고 싶은 경우. 

>> cmd 창에서 .exe 파일의 경로를 복사하여 실행시켜본다.

*경로는 exe파일을 드래그해서 cmd창에 가져다 놓으면 쉽게 입력할 수 있다.

 

pyinstaller -h 를 입력해 빌드 시 변경 가능한 옵션들을 찾아볼 수 있다. 

728x90
반응형

'컴퓨터' 카테고리의 다른 글

자연어 처리 EDA(Exploratory Data Analysis)  (3) 2020.12.17
python pandas 기본 정리  (0) 2020.12.11
[엑셀] 열 이동시키기.  (0) 2020.10.29
이름 유사도 구하기 - soundex algorithm  (0) 2020.08.02
[데이터베이스] RAID  (0) 2020.06.17

댓글