본문 바로가기
Python/Python | 웹 크롤링(Web Crawling)

[Python] Pyinstaller로 exe파일 만들 때 텍스트 파일도 같이 포함시키는 방법

by 카랑현석 2024. 3. 17.

문제 상황

만든 파이썬 크롤링 소스코드를 다른 컴퓨터에서 실행할 수 있도록 프로그램화 하기 위해서 exe 파일을 만들기 위해 평소와 같이 pyinstaller을 사용하여 패키징(실행파일 형태로 제작)을 하고 있었다.

 

pyinstaller -F [python 파일 경로주소]

 

실행 파일이 만들어지고 나서 내 컴퓨터에서는 잘 실행이 되었지만 다른 컴퓨터에서는 해당 파일이 정상적으로 작동하지 않았다.

 

문제 원인

필자는 txt 파일을 읽어와서 그 적힌 값을 랜덤하게 가져오는 코드를 짠 적이 있는데, [문제 상황]에 있는 명령어로 하면 python 파일이 패키징이 된 것이지 txt 파일은 포함이 되지 않아 문제가 생겼었다.

 

 

다른 컴퓨터 입장에서는 실행 파일을 실행했을 때 이런 생각이 드는 것이다.

"pc_user_agent.txt 파일 그게 어디있는데?"

 

문제 해결

패키징을 할 때 해당 파일도 실행 파일과 함께 번들링을 해주어야 한다.

(번들링 : 2개 이상의 제품을 하나로 묶는 것 => ex. python 파일과 원하는 txt 파일을 하나로 묶는다.)


1. visual studio code 에서 Terminal을 킨다.

2. Terminal에서 아래와 같은 명령어를 입력한다.

pyinstaller --onefile --add-data "[원본 데이터 파일의 경로];[실행 파일 실행 시 데이터 파일을 참조할 위치]" [exe 파일로 만들 python 파일 경로]

 

예시)

pyinstaller --onefile --add-data "pc_user_agent.txt;." C:\outsourcing\13_naver_map_crawling_program2\naver_map_crawling.py

 

 

--onefile 옵션(또는 -F 옵션) : 단일 실행 파일을 생성해준다. (사용자 입장에서 단일 실행 파일 하나만 실행하면 실행이 되게끔 해준다.)

--add-data 옵션 : 실행 파일과 함께 번들링할 데이터 파일을 지정해준다. (나의 경우 txt 파일이 필요했다. 이미지 파일도 가능하다.)

이때 -add-data "pc_user_agent.txt;." 처럼 지정하면 pc_user_agent.txt 파일을 현재 디렉토리(.)로 번들링하여 실행 파일과 함께 배포한다는 의미이다.

앞의 pc_user_agent.txt의 의미는 나의 Terminal 현재 경로가 C:\outsourcing 이라면 visual studio code에서 C:\outsourcing 에 있는 pc_user_agent.txt 파일을 가져와서 함께 번들링 한다는 것이다. (상대경로 사용) 

; 뒤에 있는 구문의 의미는 이 pc_user_agent.txt 파일을 .(exe 파일을 실행한 현재 경로)에 저장한 것처럼 참조할 수 있도록 해준다. 

 

3. dist 파일에서 exe 파일을 확인한다.

 

 

예시)

- 단일 실행 파일로 생성 (-F 나 --onefile 옵션 사용)

- 번들링이 필요한 데이터 (python 소스코드와 함께 묶여야 하는 파일) : pc_user_agent.txt 와 mobile_scroll.txt 

- 현재 visual studio code에서는 pc_user_agent.txt가 C:\outsourcing\10_naver_map_crawling_program\pc_user_agent.txt 에 저장되어 있고, mobile_scroll.txt가 C:\outsourcing\mobile_scroll.txt 에 저장되어 있다. (--add-data 옵션 사용)

- pc_user_agent.txt 는 프로그램 실행 시 C:\appdata 에 저장된 것처럼 해주고, mobile_scroll.txt는 프로그램 실행 시 프로그램을 실행한 현재 경로에 저장된 것처럼 하고자 한다.

- exe 파일로 만들 python 소스코드의 경로 : C:\outsourcing\13_naver_map_crawling_program2\naver_map_crawling.py

 

조건을 만족하여 exe 파일을 생성하면?

pyinstaller -F --add-data "C:\outsourcing\10_naver_map_crawling_program\pc_user_agent.txt;C:\appdata" --add-data "C:\outsourcing\mobile_scroll.txt;." C:\outsourcing\13_naver_map_crawling_program2\naver_map_crawling.py