이글에 이어서 작성합니다.
아래글은 약 6개월전을 회상하면서 작성한글입니다.
이글은 현재 시점의 글입니다.
https://programmerk.tistory.com/66
잘쓰던 프로그램이 결국 문제가생겻다.
서버 버전과 현재 버전을 체크할 시점에 인터넷 연결이 되지않으면 프로그램이 죽는다.
(ex : 인터넷이 끊기던가 , 무선인경우 발생함 )
결국 올게 왔다 생각해서 손보기로했다
pyupdater를 선택했는데 이유는 pyinstaller 기반이서였다.
진짜 자료는 정말 극악으로 없었고 , 홈페이지가 있긴한데 그대로 따라해도 안되고 , 설명도 너무 부족함 ㅡㅡ
이부분은 하나씩 따라해볼 수 있도록 진행할게요
환경셋팅
1. 윈도우
2. vscode
3. python3.7
4.pip install pyinstaller==4.4
5.pip install pyupdater==4.0
6.pip install pywin32
준비환경
upload 서버 (서버 ssh 접속 가능해야함 , 클라우드서버에서 http 접속하여 파일다운로드 가능해야함)
빌드 배포용 노트북
동작 방식
1.파일 빌드 후 인증 과정 걸쳐 scp로 파일 업로드 ,
2.프로그램 실행시마다 버전 체크하여 http로 다운받음
3.압축 해제 후 파일 덮어쓰기
4.재시작
위에환경이 설치되었다고 생각하고 진행할게요
1. 폴더생성 ( 폴더명 임시로 "python")
2. cd python
3. pyupdater keys -c
>>test
>>y
그러면 keypack.pyu 파일이 생깁니다
4. pyupdater init
>>위에서적은 앱이름
>>y
>>회사이름
>>y
>>update 파일이있는 url (ex : http://서버IP/경로 )
>>y
>>n
>>y
>>[엔터]
>>y
5. pyupdater keys -i
keypack.pyu 의 offline_public 값을 가져와서 client_config public_key에 적용하고
config.pyu 에 keypack.pyu 내용 추가.
6. app.py 작성
app.py에서는 버전 체크 및 다운로드 , 서비스 로직등을 추가하면됩니다.
내용은 버전비교해서 서버랑 다른경우 다운로드받고, 재시작 , 없는경우 비즈니스 로직 시작 입니다.
7. pyupdater make-spec app.py
pyinstaller 사용때쳐럼 취향에 맞게 옵션을 넣으면된다
옵션은 직접 찾아보세엽!
만약 첨부할 파일이있다면 datas에 추가해주시면됩니다
ex) 해당 프로젝트의 image라는 폴더와 이미지를 추가할경우 ==> datas=[('./image/*','./image/')]
8. pyupdater build --app-version=1.0.0 win.spec
빌드 시작
pyu-data/new에 아래와같은 zip파일이 생성됩니다
9. pyupdater pkg -p -s
빌드 및 인증 절차진행중 에러발생
pyupdater/core/package_handler/package.py 의 186번줄
위 코드를 아래 코드로 수정해주세요.
10. pyupdater settings --plugin scp
scp로 업로드할 서버 지정
>>서버 ssh 아이디
>>y
>>서버 ssh 패스워드
>>y
>>[엔터]
>>y
>>서버 아이피
>>y
>>upload 할 경로
>>y
실제로 config.pyu 에 보시면 아래처럼 plugin 정보가 추가됩니다
11. pyupdater upload --service scp
파일 업로드
파일질라로 서버에 접속해서 서버 upload 디렉토리 상태를 보니까 제대로 파일이있네요.
여기까지가 정상적으로 파일이 업로드 된것입니다.
한번 확인해볼게요.
pyu-data/files에있는 zip 파일의 압축을 풀어주세요
이후 cmd 창을하나열고 해당경로로 이동해서 test.exe를 실행합니다
이제 1.0.1 버전을 배포해볼게요
app.py
아까 1.0.0 버전의 파일을 다시실행해보겟습니다
파일을 다운받고 기존파일이 종료되면서 새로운 파일이 시작되는것을 볼수잇습니다
새로 시작되는 파일은 새로 배포된 로직이 실행되네요
이렇게해서 pyupdater 사용및 배포 글을 마치겟습니다.
이제 도커와 젠킨스를 사용해서 자동배포 환경을 어떻게 만들지 고민해봐야겟네요
***************************************** 추가 정보 ***********************************
자동 다운로드 파일 경로
C:\Users\ansgy\AppData\Local\test\test\update
빌드 관련 세부 로그
C:\Users\ansgy\AppData\Local\Digital Sapphire\PyUpdater\Logs
******************************주의사항*****************************************
1.
pyinstaller 4.10으로 하면 manifest 부분에서 에러가 발생함
이거때매 하루 날렷다.
https://github.com/Digital-Sapphire/PyUpdater/issues/304
2. 혹시 app_update.download() 부분에서 에러가 난다면 이 아래부분 변경해주세요
pyupdater/client/__init__.py에서
위부분 아래부분으로 수정 필요함
3. pyupdater pkg -p -s 과정에서 아래와 같은문제가 발생한다면
pip uninstall dsdev-utils 한후
pip install dsdev-utils==1.0.5 버전으로 설치하면 됩니다