ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ .exe ํ์ผ๋ก ๋ณํํ์ฌ ๋ค๋ฅธ ์ปดํจํฐ์์ ์คํํ๊ธฐ
์ด๋ฒ ๊ธ์์๋ ์น ์๋ํ ํ๋ก๊ทธ๋จ์ .exe ํ์ผ๋ก ๋ณํํ์ฌ ๋ค๋ฅธ ์ปดํจํฐ์์๋ Python ํ๊ฒฝ ์์ด ์คํํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ํตํด Python ๋ฐ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ์์ด ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์ผ๋ฉฐ, ํนํ ์น ์๋ํ ๋๊ตฌ์ธ PyInstaller๋ฅผ ์ฌ์ฉํ ๋ณํ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์น ์๋ํ ํ๋ก๊ทธ๋จ์ .exe ํ์ผ๋ก ๋ณํํ๊ณ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ
ํ์ด์ฌ์ด๋? PyInstaller๋ Python ์ฝ๋๋ฅผ ๋ ๋ฆฝ ์คํํ .exe ํ์ผ๋ก ๋ณํํ ์ ์๋ ๋๊ตฌ์ ๋๋ค. ์ด๋ฅผ ํตํด Python ํ๊ฒฝ์ ์ค์นํ์ง ์์๋ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์ต๋๋ค. ์น ์๋ํ์ ๊ฐ์ ์์ ์ ํฌํจํ ์ด ๋๊ตฌ๋ก ๋ณํํ์ฌ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
Python ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ์ปดํจํฐ์์ Python๊ณผ ํฌ๋กฌ ๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํ์ง ์๊ณ ์คํํ ์ ์๋ ๋ฐฉ๋ฒ์ .exe ํ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ์์ด ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์ต๋๋ค. ํนํ PyInstaller์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ Windows์์ ์คํ ๊ฐ๋ฅํ ์คํ ํ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค.
์ด๋ฒ ๊ธ์์๋ Python ํ๋ก๊ทธ๋จ์ .exe ํ์ผ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํ๊ณ , ๋ณํํ .exe ํ์ผ์ ๋ค๋ฅธ ์ปดํจํฐ์์ ์คํํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
ํ์ด์ฌ ์๊ฐ
PyInstaller๋ ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ ๋ ๋ฆฝ ์คํํ .exe ํ์ผ๋ก ๋ณํํ ์ ์๋ ๋๊ตฌ์ ๋๋ค. ์ด ๋๊ตฌ๋ ํ์ด์ฌ ์ฝ๋์ ํด๋น ์ฝ๋์์ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ธ๋ถ ํ์ผ ๋ฑ์ ํ๋์ ์คํ ํ์ผ๋ก ํจํค์งํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ค๋ฅธ ์ปดํจํฐ์์ ํ๊ฒฝ ์ค์ ์์ด ๋ฐ๋ก ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์ต๋๋ค.
PyInstaller ํน์ง:
- ๋จ์ผ ์คํ ํ์ผ ์์ฑ: ๋ชจ๋ ์ข ์์ฑ ํ์ผ์ ํฌํจํ ํ๋์ .exe ํ์ผ๋ก ํจํค์ง.
- ํฌ๋ก์ค ํ๋ซํผ ์ง์: Windows, Linux, macOS์์ ์ฌ์ฉํ ์ ์์ง๋ง, ๊ฐ ํ๋ซํผ์์ .exe ํ์ผ์ ๋ง๋ค๋ ค๋ฉด ํด๋น ํ๋ซํผ์์ PyInstaller๋ฅผ ์คํํด์ผ ํฉ๋๋ค.
- ํฌ๋กฌ ๋๋ผ์ด๋ฒ ํฌํจ: ์น ์๋ํ๋ฅผ ์ํ ํฌ๋กฌ ๋๋ผ์ด๋ฒ์ ๊ฐ์ ์ธ๋ถ ํ์ผ์ ํฌํจํ ์ ์์ต๋๋ค.
PyInstaller ์ค์นํ๊ธฐ
๋จผ์ , PyInstaller๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด pip ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ PyInstaller๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
pip install pyinstaller

ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ .exe ํ์ผ๋ก ๋ณํํ๊ธฐ
์ด์ Python ํ๋ก๊ทธ๋จ์ .exe ํ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค. ์๋๋ ๊ธฐ๋ณธ์ ์ธ ๋ณํ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
Python ์ฝ๋ ์์
์๋ฅผ ๋ค์ด, ์น ์๋ํ๋ ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์ ์ด๋ฅผ ์ํ Selenium์ ์ฌ์ฉํ๋ Python ํ๋ก๊ทธ๋จ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
import time from selenium import webdriver # ํฌ๋กฌ ๋๋ผ์ด๋ฒ ๊ฒฝ๋ก ์ค์ driver_path = "path_to_chromedriver.exe" # ํฌ๋กฌ ๋๋ผ์ด๋ฒ ์์น # ํฌ๋กฌ ๋๋ผ์ด๋ฒ๋ก ๋ธ๋ผ์ฐ์ ์ด๊ธฐ driver = webdriver.Chrome(executable_path=driver_path) # ์น ํ์ด์ง ์ด๊ธฐ driver.get("https://www.example.com") # ์ ์ ๋๊ธฐ time.sleep(5) # ์น ํ์ด์ง ๋ซ๊ธฐ driver.quit()
.exe ํ์ผ ๋ง๋ค๊ธฐ
์ ์ฝ๋๋ฅผ .exe ํ์ผ๋ก ๋ณํํ๋ ค๋ฉด PyInstaller ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋ฉ๋๋ค. Python ํ์ผ์ด my_program.py๋ผ๊ณ ๊ฐ์ ํ ๋, ์๋์ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
pyinstaller --onefile my_program.py
- --onefile: ๋ชจ๋ ํ์ผ์ ํ๋์ ์คํ ํ์ผ๋ก ๋ฌถ์ต๋๋ค.
- my_program.py: ๋ณํํ Python ํ์ผ์ ์ด๋ฆ.
์ด ๋ช ๋ น์ ์คํํ๋ฉด dist ํด๋ ์์ my_program.exe ํ์ผ์ด ์์ฑ๋ฉ๋๋ค.

ํฌ๋กฌ ๋๋ผ์ด๋ฒ ํฌํจ์ํค๊ธฐ
Selenium๊ณผ ๊ฐ์ ์น ์๋ํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ๋๋ ํฌ๋กฌ ๋๋ผ์ด๋ฒ๊ฐ ํ์ํฉ๋๋ค. ์ด ๋๋ผ์ด๋ฒ๋ .exe ํ์ผ๋ก ๋ณํํ ๋ ํจ๊ป ํฌํจ์์ผ์ผ ํฉ๋๋ค.
PyInstaller๋ฅผ ์ฌ์ฉํ ๋ ํฌ๋กฌ ๋๋ผ์ด๋ฒ๋ฅผ ํฌํจ์ํค๋ ค๋ฉด --add-data ์ต์ ์ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํฌ๋กฌ ๋๋ผ์ด๋ฒ ํ์ผ์ด chromedriver.exe๋ผ๋ฉด ์๋์ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค:
pyinstaller --onefile --add-data "path_to_chromedriver.exe;." my_program.py
- --add-data "path_to_chromedriver.exe;.": ํฌ๋กฌ ๋๋ผ์ด๋ฒ ํ์ผ์ .exe ํ์ผ์ ํฌํจ์ํต๋๋ค. ์ธ๋ฏธ์ฝ๋ก (;)์ ์ฌ์ฉํ์ฌ ์๋ณธ๊ณผ ๋์ ๊ฒฝ๋ก๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
์์ฑ๋ .exe ํ์ผ ํ์ธ
์ ๋ช ๋ น์ ์คํํ ํ, dist ํด๋์ ์์ฑ๋ .exe ํ์ผ์ ํ์ธํ ์ ์์ต๋๋ค. ์ด์ ํด๋น ํ์ผ์ ๋ค๋ฅธ ์ปดํจํฐ๋ก ์ฎ๊ฒจ์ ์คํํ ์ ์์ต๋๋ค.
๋ค๋ฅธ ์ปดํจํฐ์์ .exe ํ์ผ ์คํํ๊ธฐ
Python๊ณผ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ์ง ์์ ๋ค๋ฅธ ์ปดํจํฐ์์๋ ์ด .exe ํ์ผ์ ์คํํ ์ ์์ต๋๋ค. ๋จ, ๋ช ๊ฐ์ง ์กฐ๊ฑด์ ํ์ธํด์ผ ํฉ๋๋ค:
ํฌ๋กฌ ๋๋ผ์ด๋ฒ์ ๊ด๋ จ ํ์ผ
ํฌ๋กฌ ๋๋ผ์ด๋ฒ์ ๊ฐ์ ์ธ๋ถ ํ์ผ์ ํฌํจํ๋๋ผ๋, ํด๋น .exe ํ์ผ์ ์คํํ ๋ ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค. ๋ง์ฝ ๋ค๋ฅธ ์ปดํจํฐ์ ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์ค์น๋์ง ์์๋ค๋ฉด, ์ฌ์ฉ์๊ฐ ์ง์ ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
. ์คํ ํ๊ฒฝ
.exe ํ์ผ์ Windows ์ด์์ฒด์ ์์๋ง ์คํ๋ ์ ์์ต๋๋ค. ๋ง์ฝ ๋ค๋ฅธ ์ด์์ฒด์ ์์ ์คํํด์ผ ํ๋ค๋ฉด, ํด๋น ์ด์์ฒด์ ์ ๋ง๋ Python ํ์ผ์ ๊ฐ๊ฐ .exe๋ก ๋ณํํ๊ฑฐ๋ ๋ค๋ฅธ ํ๋ซํผ์์ ์คํํ ์ ์๋ ํ์์ผ๋ก ๋ณํํด์ผ ํฉ๋๋ค.
์๋ํ ์ถ๊ฐ ์ต์
์์ด์ฝ ์ถ๊ฐํ๊ธฐ
.exe ํ์ผ์ ์์ด์ฝ์ ์ถ๊ฐํ๋ ค๋ฉด --icon ์ต์ ์ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, icon.ico๋ผ๋ ์์ด์ฝ ํ์ผ์ ์ถ๊ฐํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค:
pyinstaller --onefile --add-data "path_to_chromedriver.exe;." --icon=icon.ico my_program.py
์ฝ์ ์ฐฝ ์จ๊ธฐ๊ธฐ
ํ๋ก๊ทธ๋จ์ ์คํํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ์ ์ฐฝ์ด ์ด๋ฆฝ๋๋ค. ์ด ์ฐฝ์ ์จ๊ธฐ๋ ค๋ฉด --noconsole ์ต์ ์ ์ถ๊ฐํฉ๋๋ค.
pyinstaller --onefile --noconsole --add-data "path_to_chromedriver.exe;." my_program.py
์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด .exe ํ์ผ์ด ์คํ๋ ๋ ์ฝ์ ์ฐฝ์ด ๋ํ๋์ง ์์ต๋๋ค.
ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ .exe ํ์ผ๋ก ๋ณํํ์ฌ ๋ฐฐํฌํ๊ธฐ
PyInstaller๋ฅผ ์ฌ์ฉํ๋ฉด Python ํ๋ก๊ทธ๋จ์ Windows์์ ์คํํ ์ ์๋ .exe ํ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ค๋ฅธ ์ปดํจํฐ์์๋ Python ์ค์น ์์ด ์์ฝ๊ฒ ์๋ํ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์ต๋๋ค. ํนํ ์น ์๋ํ๋ ํฌ๋กฌ ๋๋ผ์ด๋ฒ์ ๊ฐ์ ์ธ๋ถ ํ์ผ์ ํฌํจ์ํค๋ฉด Python๊ณผ ๊ด๋ จ๋ ์ค์ ์์ด ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๊ฒ ๋ฉ๋๋ค.