project xelloss m2 는 약 4년 전 인수·인계 받았던 업무 관련 검수 프로그램을 새로 리뉴얼한 버전이다. 기존 3.5버전의 파이참 지원 중지에 따라 3.12로 업그레이드시키면서 신규 기능 추가 및 국가별 멀티 태스킹 검수가 되도록 기능을 개선하였다. 그리고 개인적 대망의 EXE 배포인데도 자동 업데이트할 수 있게 되었다!
프로젝트 기간: 2024.11.27 ~ 2025.03.27
검수 툴 기반이라 폴더와 파일에 직접적 개입이 있어서 응용프로그램 형식으로 제작 진행
파이썬 tkinter 기반으로 진행하다가… 보더에 라운드 안 되는 거에 충격받고.. customtkinter 로 바꿈.
기존 ver1에서는 pyqt5였는데 pyuic5 form.ui -o form.py 해주는게 귀찮아서 흐흐..
D:\Python\python311\python.exe -m venv vMobis # 가상환경 설치 D:\Develop\D_mobis\vMobis\Scripts\activate # 가상환경 활성화
추가 설치
pip install customtkinter pip install pillow requests pip install pyinstaller==6.11.1 pip install pandas pip install openpyxl pip install beautifulsoup4 pip install addict # Python 객체를 딕셔너리처럼 다룰 수 있게 해주는 라이브러리 pip install netifaces # 네트워크 인터페이스 및 IP 정보를 확인할 수 있는 라이브러리 pip install lxml # xml 처리 pip install pefile pip install python-dateutil pip install psutil # 강제 종료 관련 프로세스 관리오 모니터링 pip install auto-py-to-exe 모아서: pip install -r requirements.txt
최근 경로 기능
탭 헤더 아이콘 결과에 따라 변경
하단에 오류 메시지 제공
자동 업데이트
[기본검사] 템플릿, 지역 향, 언어 수 및 값 체크
IP 체크 – 보안실 분리
단일 언어 / 지역향 언어 모두 되게 처리(지역향은 폴더 명 상관 없이)
[Tab1/DB생성] search_db 파일로 저장
[Tab1/기본검사] 필수 파일 검사 + HTML 파일 전부 있는지 검사
[Tab1/챕터 아이콘] 챕터 이미지 실제 있는지 검사
[Tab1/C_Option] 개수 카운트
[Tab2] C 링크 검사 – 링크 체커 (c_crossreference, c_url 검사)
[Tab3] 이미지 파일 검사 – src 검사. 이미지 파일 실제 있는지 검사. GIF 파일 실제 있는지 검사.
[Tab4] Heading1 검사 – h1이 존재하는지. 텍스트가 있는지 검사.
[Tab5] 파일명 검사 – 파일명은 영문 소문자(단, HTML파일명과 폰트명은 영문 대문자 허용)
허용 확장자(‘.html’, ‘.css’, ‘.js’, ‘.gif’, ‘.png’, ‘.svg’, ‘.jpg’, ‘.ico’, ‘.ttf’, ‘.otf’, ‘.eot’, ‘.woff’, ‘.woff2‘) 외의 파일은 오류로 검사.
검사 속도 개선
내용 부분 클릭 시 텍스트 복사(기존 더블 클릭에서 변경)
폴더 명을 지역 향으로 하지 않아도 검사 되도록 기능 개선
최신 검사 경로 기록 삭제 기능 추가
하단 진행 및 오류 메시지 추가
HTML 파일 누락 검사 개선
챕터 아이콘 및 GIF 파일이 실제 있는지 확인 기능 추가
더블 클릭 시 해당 텍스트 복사되도록 변경
상호 참조 키 없음 오류 메시지 쪽 개선
자동 업데이트
UPX (Ultimate Packer for eXecutables)는 실행 파일 (EXE) 및 동적 링크 라이브러리 (DLL) 파일을 압축하여 파일 크기를 줄이는 도구로 공식 홈페이지 :https://github.com/upx/upx/releases upx-5.0.0-win64.zip 받아서 설치~
환경 변수 – path에서 내가 방금 받은 upx 폴더 넣어주기
그리고 확인하면 잘 설치 되어 있다.
upx --version
그런데 가상 환경에서 안 돼서 추가로 시스템 환경 변수에도 추가~
이제 가상 환경에서도 사용 가능~!
스펙 파일에도 추가
def compress_with_upx(): upx_exe = "D:\\Python\\upx-5.0.0-win64\\upx.exe" # EXE 압축 exe_path = os.path.join(dist_folder, "Xelloss_MOBIS.exe") subprocess.run([upx_exe, '--best', '--lzma', '--force', exe_path]) # DLL 압축 dll_folder = os.path.join(dist_folder, "_internal") subprocess.run([upx_exe, '--best', '--lzma', '--force', f"{dll_folder}\\*.dll", '--exclude=api-ms-*', '--exclude=python*.dll']) compress_with_upx()
아무래도 배포형 파이썬 응용프로그램의 자동 업데이트가 가장 어려웠다.
응용프로그램이다보니 EXE로 나가게 되는데 자동 업데이트를 하게 되면 이리저리 꼬인달까?
일단 총 5가지 방법으로 테스트 진행되었다.
타입1. 포터블 – pyinstaller + .bat 사용 업데이트 : 실패 (파이썬 파일이 아닌 파일들 자동 설치 오류 ex>blue.json 배포 포함은 되나 임시 폴더에 설치가 안 됨 – 파일인스톨러 문제 등)
타입2. 설치형 – NSIS : 실패 (설치는 잘 되나 설치형도 결국 자동 업데이트 처리하려면 포터블과 동일하게 진행 해야 해서 굳이 설치를 쓸 필요가 없었음.)
타입3. 설치형 – Inno Setup : 실패 (설치형 nsis보다 ui 디자인이 좋으나 업데이트에서 위와 동일 문제 발생)
타입4. 포터블 – PyUpdater : 실패 (3.9버전 이하로만 되고 현재 연결된 라이브러리 버전 종료로 직접 파일 수정해도 연결된 코드들이 제대로 동작 안 함)
타입5. 포터블 – auto-py-to-exe + .exe : 자동 업데이트 가능!
결론은 포터블 – auto-py-to-exe + .exe 됨! 이번에 전체 개발 시간 중에 가장 많이 투자된 게 이 자동 업데이트 부분이었다. 흐…
문제가 됐던 자동 업데이트도
이렇게 가능해짐!
확실히 자동 업데이트가 되니 배포하기 편하고, 사용자들도 일일이 다운 받는 수고가 적어서 좋고 저번이 달라져 놓치는 부분 없어서 좋음!
기타 프로젝트: https://pixiclue.com/tag/project/