-
쇼핑몰 주문 업체별 주문파일 생성하기, 대량 이메일 발송 업무 자동화 프로그램 파이썬 개발, Gui, PyQT5, QT designer, pyinstaller exe 실행 파일 만들기 디버깅 error 해결, pyinstaller exe파일 용량 줄이는..데이터 분석/Python 2022. 2. 10. 15:08
RPA: 업무 프로세스 자동화 프로그램 개발
회사에서 다른 마케팅팀 직원들이 쓸 수 있는 사내용 업무 자동화 프로그램 개발 업무를 맡게 되었다. 주로 하는 업무는 데이터 분석 프로젝트 제안과, 데이터 분석, 엔지니어링이지만 처음 만드는 개발 프로그램인만큼 신경이 쓰여 틈틈히 정리해두었다.
현재 업무 프로세스
- *** 쇼핑몰 admin 에서 주문파일 다운 → 2. 업체별로 주문파일 엑셀파일로 저장 → 3. 각 업체별 주문파일 메일로 배송 및 송장번호 회신 요청 → 4. 송장번호 회신받기(메일로) → 5.B*** 쇼핑몰 admin에 송장번호 등록
개발 가능 범위
1.** 쇼핑몰 admin 에서 주문파일 다운 (구현)
→ xls 파일 → xlsx 형식으로 자동변환
2. 업체별로 주문파일 엑셀파일로 저장 (구현)
→ xlsx 엑셀파일 pandas로 전처리
→ 브랜드명/업체명 리스트 사전만들기
→ dataframe으로 브랜드명 data 조회
→ 업체명으로 각 dataframe 엑셀파일 저장
- 저장한 엑셀파일 기반으로 대량발송 가능한 email 리스트 만들기 (구현)
→ 메일주소/제목/본문/첨부파일 내용 엑셀 자동 생성할 수 있도록 프로그래밍
- 각 업체별 주문파일 메일로 배송 및 송장번호 회신 요청 (구현)
→ SMTP 서버로 MIME(Multipurpose Internet Mail Extensions)템플릿: 메일 작성을 위한 표준적인 형식
→제목, 본문, 첨부파일 다르게 대량으로 이메일 보내기
개발 시간
개발 가능 범위 확인 및 검토, 파일요청 : 5일
개발 진행 : 약 10 일
개발 소스코드
https://github.com/Areum120/bmwjoymall/tree/main/product_classification
1.convert_to_xlsx ->주문파일.xls ->xlsx 형식으로 변환 2.excel_classification->주문파일 불러와서 업체명 조회하여 각 업체별 주문내역 엑셀 파일 생성 3.create_email_list->생성한 엑셀파일 기준으로 수신자,제목,본문,첨부파일 내용 이메일리스트 작성 4.mailing_auto->이메일리스트로 대량 메일 자동 발송
1.https://github.com/Areum120/bmwjoymall/blob/main/product_classification/convert_to_xlsx.py 2.https://github.com/Areum120/bmwjoymall/blob/main/product_classification/excel_classification.py 3.https://github.com/Areum120/bmwjoymall/blob/main/product_classification/create_email_list.py 4.https://github.com/Areum120/bmwjoymall/blob/main/product_classification/mailing_auto.py
사용법(GUI 완료 → exe 실행파일 개발 진행)
추후 자동화 프로그램을 웹으로 고도화하려면 서버가 필요하므로 서버 없이 어플리케이션 배포방법 필요, GUI 프로그래밍으로 사용자가 프로그램 사용할 수 있도록 인터페이스 개발 중
개발 진행 : 1/17(월)~1/21(금), 2/3~4
GUI app 개발 완료(2/3) → 실행파일 개발 완료 (2/10)
https://github.com/Areum120/bmwjoymall/tree/main/GUI
느낀점
- 틈틈이 풀었던 코딩테스트가 도움이 많이 된 것 같음
- 입사했을 때보다는 프로그래밍 실력이 향상되었음
- 단순 기능 개발보다 사용 유저가 ‘편하게 사용할 수 있도록’ 기능 구현하는 것이 어려움
- GUI 프로그래밍 멀티 스레드 개념이 어려움, GUI 작동 시 이유없이 프로그램 자동 종료되는 문제로 며칠 골머리 앓았는데 예외시 종료 방지 코드로 디버깅할 수 있었음.
- 실행파일 생성에 3~4일 넘게 소요됨, 실행 오류로 디버깅이 어려웠고 경로설정으로 인한 오류 외 다양한 오류가 많았음
pyinstaller exe 실행 파일 만들기 디버깅 에러 해결 과정
디버깅하는 과정은 콘솔로 exe 파일을 만든다음 cmd에서 run.exe 로 실행하였음
많은 사람들이 .spec 파일 명시를 중요하게 다루었으나 정작 .spec 파일은 따로 건드리지 않고 exe 파일 생성하였으니 잘 작동되었음
pyinstaller exe 실행안됨 에러(errors) 들
1. FileNotFoundError: [Errno 2] No such file or directory:
→ 경로 재설정 해결
경로 문제가 제일 빈번했는데 path문제는 루트가 어디로 설정 되어있는지 기본값은 무엇인지부터 시작해야함
2. ImportError: DLL load failed while importing QtCore: 지정된 프로시저를 찾을 수 없습니다.
→ conda update pyqt 로 해결 spec파일의 pathex 경로를 파이썬 bin 경로를 붙여야 하는 줄알았으나 다르게 해결됨
3. this application failed to start because no qt platform plugin could be initialized
→ 시스템 환경변수 경로 추가
변수이름 : QT_QPA_PLATFORM_PLUGIN_PATH
변수값 : C:\Users\workscombine\Desktop\work\bmwjoymall_rpa\project_env\Lib\site-packages\PyQt5\Qt5\plugins\platforms
4. PermissionError: [WinError 5] 액세스가 거부되었습니다: 'C:\\Users\\웍스컴바인\\Desktop\\work\\bmwjoymall_rpa\\dist\\run.exe’
→cmd 명령창 관리자 계정으로 실행하여 명령 실행
5. [Exception: Cannot find existing PyQt5 plugin directories.
Paths checked: C:/Users/·¹º§¿¡ ¸Â/AppData/Roaming/Python/Python39/Site-packages/PyQt5/Qt/plugins]
→ 사용자계정 한글이름 영문으로 변경 후 해결 (참고 블로그 :https://superhky.tistory.com/297 )
많은 분들이 노하우와 정수가 담긴 글을 써주셔서 다행히 많은 문제를 해결할 수 있었다.
용량 줄이는 법
cmd 창에서 python 이라고 치면 anaconda에 설치된 python이 기본 설정으로 나온다
python 3.9를 다운받아서 시스템 환경변수 편집에서 path 설정을 편집 -> 새로만들기로 추가한다
C:\Users\workscombine\AppData\Local\Programs\Python\Python39\Scripts
C:\Users\workscombine\AppData\Local\Programs\Python\Python39
그다음 cmd창에서 python을 쳤을 때 conda가 아닌 새로 설치한 python이 기본설정으로 되어 있는 걸 확인할 수 있다.
그 다음 run.py를 만든 폴더로 들어가 가상환경을 생성해준다
cd project_env/Scripts activate
생성한 가상환경을 활성화 한 후 cd..로 다시 run.py가 있는 곳으로 가서 exe 실행파일을 생성해준다
pyinstaller -w -F run.py
아나콘다의 python이 활성화 되면 아래에서 Python(conda) 라고 되어 있다.
설치 완료 되니 아나콘다로 exe 파일 생성했을 때는 340MB 였던 파일이 60MB로 줄어들었다.
(참고 블로그:
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=blueqnpfr1&logNo=221582183962)
그외 참고하였던 블로그
https://iamaman.tistory.com/3289
https://blog.winterjung.dev/2017/02/23/pyinstaller
https://tina0430.tistory.com/34
https://4uwingnet.tistory.com/4
https://fidelislee.tistory.com/entry/Python-PyQt%EB%A1%9C-GUI-%EC%96%B4%ED%94%8C-%EB%A7%8C%EB%93%A4%EC%96%B4-%EB%B3%B4%EA%B8%B0-22
https://developer-mistive.tistory.com/59
https://blog.daum.net/goodgodgd/30반응형'데이터 분석 > Python' 카테고리의 다른 글