이번에 파이썬 프로그램을 설치형으로 배포하고자 NSIS 사용하기 진행을 해보았다.
NSIS는 강력하고 유연한 설치 프로그램 제작 도구로, 설치 파일 크기가 작고 커스터마이징이 쉬운 장점이 있다고 한다.
공식 홈페이지: https://nsis.sourceforge.io/Main_Page 에서 최신 버전 프로그램을 다운 받는다.
처음 사용 하였기에 기본 설정 그대로 진행 하였다.
설치 후 NSIS 실행하면
이 화면이 나오면 설치 정상적으로 된 것
NSIS는 파이썬 .py 파일을 직접 설치할 수 없으므로, 먼저 PyInstaller를 사용해 .exe 파일로 변환해야 함
내 경우엔 spec 파일로 배포를 만들꺼라서
pyinstaller Xelloss_MOBIS.spec
배포 버전 파일 제작을 위해 명령어 실행 후 “dist” 폴더를 보면 배포 파일이 만들어짐
여기 까지 하면 배포를 위한 기본 준비 끝.
설치를 위해서는 nsi 파일이 필요하다.
Unicode true # 컴파일 시 버전 정보 읽기 (빌드 전 처리) !system 'for /f "delims=" %i in (D:\Develop\D_mobis2\version.txt) do @echo !define BUILD_VERSION "%i" > _temp.nsh' !include "_temp.nsh" !system 'del _temp.nsh' # 설치창 타이틀 설정 Name "Xelloss_MOBIS ${BUILD_VERSION}" Icon "D:\Develop\D_mobis2\img\icon.ico" Section "Init" # ▼ 버전 검증 (컴파일 타임에서 이미 처리) # MessageBox MB_OK "[최종확인] 빌드버전: ${BUILD_VERSION}" SectionEnd #------------------------------------------- OutFile "Xelloss_MOBIS_${BUILD_VERSION}.exe" InstallDir "$PROGRAMFILES\Xelloss_MOBIS_${BUILD_VERSION}" Section "Install" SetOutPath "$INSTDIR" # 컴파일 시 고정 경로 사용 (버전 정보 하드코딩) File /r "D:\Develop\D_mobis2\dist\${BUILD_VERSION}\_internal\*.*" File "D:\Develop\D_mobis2\dist\${BUILD_VERSION}\Xelloss_MOBIS.exe" # 복사한 파일 목록 확인 DetailPrint "File Copied: $INSTDIR\Xelloss_MOBIS.exe" # 바로가기 생성 (관리자 권한 대응) SetShellVarContext all CreateDirectory "$SMPROGRAMS\Xelloss_MOBIS" CreateShortcut "$DESKTOP\Xelloss_MOBIS.lnk" "$INSTDIR\Xelloss_MOBIS.exe" CreateShortcut "$SMPROGRAMS\Xelloss_MOBIS\Xelloss_MOBIS.lnk" "$INSTDIR\Xelloss_MOBIS.exe" # 언인스톨러 작성 WriteUninstaller "$INSTDIR\uninstall.exe" # 제어판에 프로그램 등록 추가 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Xelloss_MOBIS" "DisplayName" "Xelloss_MOBIS" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Xelloss_MOBIS" "UninstallString" "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Xelloss_MOBIS" "InstallLocation" "$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Xelloss_MOBIS" "DisplayVersion" "${BUILD_VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Xelloss_MOBIS" "Publisher" "lai4@hansem.com" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Xelloss_MOBIS" "DisplayIcon" "$INSTDIR\icon.ico" # 아이콘 파일 복사 File "D:\Develop\D_mobis2\img\icon.ico" # 설치 완료 후 자동 종료 추가 SetAutoClose true SectionEnd Section "Uninstall" # 프로그램 파일 삭제 nsExec::Exec 'taskkill /F /IM Xelloss_MOBIS.exe' ; 실행 중인 프로그램 강제 종료 Sleep 1000 ; 종료 대기 (잠금 해제 대기) Delete "$INSTDIR\Xelloss_MOBIS.exe" Delete "$INSTDIR\VCRUNTIME140_1.dll" RMDir /r "$INSTDIR\_internal" # 바로가기 강제 삭제 (바탕화면 포함) IfFileExists "$DESKTOP\Xelloss_MOBIS.lnk" 0 +2 Delete "$DESKTOP\Xelloss_MOBIS.lnk" # 공용 바탕화면 경로 추가 IfFileExists "C:\Users\Public\Desktop\Xelloss_MOBIS.lnk" 0 +2 Delete "C:\Users\Public\Desktop\Xelloss_MOBIS.lnk" # 레지스트리 삭제 DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Xelloss_MOBIS" # 설치 폴더 강제 삭제 (잠금 대응) RMDir /r "$INSTDIR" # 언인스톨러 자동 종료 추가 Quit SectionEnd
자기에 맞게 커스텀해서 파일을 만들어주고 나중에 실제 배포용 exe를 만들면 .nis 파일과 동일한 경로에 파일이 생성된다.
.nis 파일과 아까 배포용 파일까지 준비가 되었다면 실제 nsis로 배포용 exe 만들 차례~
[NSIS Menu] 창에서 주황색 네모 부분인 [Complie NSI scripts] 부분을 눌러주면 [MakeNSISW]가 새창으로 뜬다.
그럼 파일 선택만 해주면 진행 됨.
이때 오류가 발생하면
붉은 색 창이 뜬다. 그리고 가장 아래 부분에 오류 내용이 뜨는데 오류를 고쳐주면 된다.
그리고 정상적으로 동작한다면
초록색 화면으로 뜬다.
경고의 경우 주황색으로 뜨는데 이때는 배포 파일은 만들어지는데 뭔가 찜찜해서 고치게 되는~~
실제 nsis로 만들어서 설치하는 화면이다.
생각보다 흠.. 하지만… 일단 된다는 게 어디냐!
처음엔 포터블로 배포하려고 생각해서서 진행하였다. 버전별로 배포판까지는 잘 만들어졌는데…
자동 업데이트 부분을 하다 보니 업데이트 도중에 윈도우 창이 따로 뜨지 않아서 진행 중인 건지 멈춘 건지 좀 헷갈렸다.
거기다 한 번씩 업데이트 폴더가 좀 정리 안 되는 느낌이라 설치형으로 찾아보니 NSIS 또는 Inno Setup을 추천해 주었다.
NSIS: 설치 마법사 형태로 자동 설치 가능
Inno Setup: GUI 기반으로 직관적이며 설정이 쉬움
일단 권장인 NSIS로 만들긴 했는데… 생각했던 UI창 모습이 좀 아니긴 해서….
열심히 만들어서 그런지 그래.. 포기(?)하고.. 윈도우98 때 레트로 느낌이 이쁠 수도..라고 생각 했다가….
혹시 하고 Inno Setup 화면 보니깐 ㅋㅋㅋㅋ….
결론은… 내일 다시 만들어 봐야겠다 쿨럭…
뭐 좋은 경험이었다!