본문 바로가기

PYTHON

pyinstaller로 selenium과 chromedriver 포함하기

반응형

셀레니엄을 사용하는 파이썬 코드를 pyinstaller로 실행파일을 만들면 바로 실행이 안 됩니다.

 

이유는 파이썬코드에서 사용하는 크롬드라이버가 실행파일에 포함이 안 돼서 그렇습니다.

 

런타임 상태 확인

우선, pyinstaller로 만든 실행파일에서 파이썬 코드를 실행하는지 판단하는 코드를 포함해야 합니다.

 

import sys
if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
    print('running in a PyInstaller bundle')
else:
    print('running in a normal Python process')

출처: https://pyinstaller.readthedocs.io/en/stable/runtime-information.html

 

실행파일을 실행하면 sys.frozen 속성을 설정하고, 실행파일의 경로를 sys._MEIPASS에 저장한다고 합니다.

그래서 이 값을 확인하는 코드를 삽입해야 합니다.

 

if getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS"):
    chromedriver_path = os.path.join(sys._MEIPASS, "chromedriver.exe")
    browser = webdriver.Chrome(chromedriver_path)
else:
    browser = webdriver.Chrome(ChromeDriverManager().install())

 

이렇게, 실행파일로 코드를 동작할 때 현재 폴더에 있는 chromedriver를 사용하도록 합니다.

 

 

 

chromedriver 포함

이번에는 크롬드라이버를 실행파일에 포함시켜 줍니다.

 

pyinstaller에 --add-binary 옵션으로 chromedriver가 설치된 폴더 경로를 지정하면 됩니다.

 

문법은 다음과 같습니다. 

 

--add-binary <SRC;DEST or SRC:DEST>

 

이제 pyinstaller로 실행 파일을 만들고 동작확인을 하면 됩니다.

 

pyinstaller --onefile  --add-binary "../webcrawling/chromedriver/chromedriver.exe;."  main.py

 

 

반응형