본문 바로가기

개발/docker

python 에서 .exe 배포 - 1

어디서부터 설명해야할지 고민하다가 ..  처음 이문제를 어떻게 접하게됫는지부터 설명하기로....

 

 

상황설명 :

1. 반드시 python으로 개발해야하는 상황이였다

2. 현장(각 매장)에서 쉽게 사용할 수 있도록 실행파일로 배포해야 한다.

3. 점진적으로 확장되는 상황이였다.

 

 

일단 python을 exe로 배포해주는 라이브러리는 2~3개 있엇다. 

(cx_freeze , pyinstaller , auto py to exe )

 

모두 테스트해봣는데 별반 차이없었다. 

( 빌드 컴퓨터가라 윈도우였다. )

 

 

이제 젠킨스로 연결해서 서버에 배포하고 클라이언트에서 어떻게 받아갈지를 고민했다.

 

처음에 github release를 pyupdater  알아봣는데 자료도 너무없고 , 시간이 촉박해서 패스..

 

간단하게 python으로 scp 를 사용해서 서버와 버전을 비교하고 scp로 파일 다운받는 방식을 선택햇다.

 

그런데  scp를 사용하는 프로그램에서  다른 버전의 같은 프로그램을 다운로드 받으면 에러가 발생한다.

ex) 버전 체크 프로그램 A , 다운로드 프로그램 A ==> 충돌발생하여 에러발생

 

 

그래서 결국 버전 체크 및 다운로드용 프로그램 1, 실제 실행 프로그램 1 두개를 만들어서 배포했다.

ex) 버전 체크 프로그램 checkApp.exe , 서비스 프로그램 app.exe

( 급햇다고하지만 지금생각하면 너무 ......)

 

이제 jenkins로 배포하는 부분을 찾아보앗다.

 

그런데 ... 리눅스 서버에서 배포를 하니까 .exe파일이아니라 리눅스 용 프로그램이 생성됫다.

분명 .exe가 생겨야하는데.......

 

그래서 또 삽질을 하다가

 

wine이라는걸 알아냇다. 

wine이란?
wine은 리눅스, 맥, FreeBSD, 솔라리스 사용자가 마이크로소프트용 응용 프로그램을 
윈도우 설치 없이 사용 가능하게 하는 프로그램입니다.

wine 위에서 pyinstaller를 하면 exe 파일이 나올꺼라고 생각햇다...ㅋㅋㅋ

 

숭고한 삽질끝에 

결국 cdrx/pyinstaller-windows:python3  를 사용하여 linux docker container 위에서 exe 파일을 생성할 수 있엇다.

 

 

 

jenkin 빌드 설정

 

docker run -v "/root/var:/src/" cdrx/pyinstaller-windows:python3 -c "python -m pip install --upgrade pip && pip install -r requirement.txt && pyinstaller --clean -y -F --dist ./dist/windows --workpath /tmp *.spec && chown -R --reference=. ./dist/windows"

 

 

 

 

최종적으로 아래처럼됫다.

 

 

한동안은 잘 사용했다

시간적 여유가 생기면 바꿔야한다고 알고잇는 있엇다. 머리도 , 몸도 , 마음도 .. 계속 미룰뿐.. 

그래도 크게 문제없이 5~6개월 사용한거같다.

 

그런데 결국 checkApp 코드를 변경할 일이 생겻다.

checkApp의경우 코드를 변경하면 각 매장에 원격이든 , 방문이든 해서 바꿔줘야한다.^^;;

 

 

checkApp 문제 발생부터 이어서..