반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

오늘은 제가 윈도우 환경에서 pyinstaller로 패키징한 exe파일의 용량을 줄이기 위해서 새로운 가상환경을 만들고, pywin32를 설치 및 사용하면서 겪었던 문제들을 정리해보려 합니다.

 

개인적으로 너무 고생을 해서 다른 분들은 이 글을 보시고 문제들을 쉽게 해결하시길 바랍니다.

 


1. powershell 권한 설정 문제

 

1) 문제 현상

 

VScode의 터미널창(windows의 경우 기본적으로 Powershell)을 켰을 때 발생하는 오류 메시지

 

+ CategoryInfo : 보안 오류: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

 

2) 해결 방법

 

구글링을 하다보면 VScode의 기본 터미널을 Powershell을 cmd로 바꾸라고 하는 경우가 많은데, 참고로 cmd보다 업그레이드 된 터미널이 Powershell이라고 합니다. (실제로 cmd로 터미널을 켜면 해당 오류는 출력되지 않음)

 

실제 사용할 때는 큰 차이는 못느꼈지만 저는 그냥 아래의 방법을 이용해서 powershell을 기본 터미널로 이용하기로 하였습니다.

 

a) 우선 윈도우(windows10 기준)화면 좌측하단의 검색창을 클릭해서 "powershell"을 입력 후, 그림에 표시된 Windows PowerShell을 우클릭하여, 관리자권한으로 실행시켜줍니다.

 

 

b) 다음 명령어들을 차례대로 입력하고 엔터를 눌러줍니다. 해당 과정은 허용되지 않은 스크립트를 사용하겠다고 설정해주는 과정입니다. 

 

- Set-ExecutionPolicy Unrestricted

- Y

 

 

2. 가상환경 신규생성 후, win32com 설치 및 스크립트 실행 시 문제

 

1) 문제 현상

 

ImportError: DLL load failed while importing win32api: 지정된 프로시저를 찾을 수 없습니다.

 

 

2) 해결 방법

2021년 12월 16일 기준, pywin32를 설치하면 302 버전이 설치됩니다. 하지만 최신 버전의 안정성 문제 때문인지 위와 같은 에러를 출력하면서 파이썬 스크립트가 정상적으로 실행되지 않습니다.

 

따라서 해결방법은 버전을 다운그레이드 해주는 것입니다.

 

pip install --upgrade pywin32==225

225 버전으로 다운그레이드 완료

 

 

3. pyinstaller 패키징 후, win32com(win32api) 못찾는 현상

 

1) 문제 현상

 

가장 저를 괴롭혔던 문제이며, 구글링을 해보아도 원인을 알 수 없었던 문제였습니다.

 

멀쩡히 잘 돌아가던 파이썬 스크립트가 pyinstaller로 exe파일을 만들어서 실행시키니깐, 위에서 발생했던 2번 문제가 또 발생했습니다.

 

exe파일 실행 시, 출력되는 에러 팝업창

 

새로 생성한 가상환경을 '환경 변수'에 추가해주지 않아서 그런가해서 path에 추가해주고 컴퓨터를 재부팅 해보아도 문제는 해결되지 않았습니다.

 

2) 해결 방법

 

정말 운이 좋게도 겨우겨우 해결한 방법은 VScode의 터미널창이 아닌, Windows Powershell를 직접 열어서 pyinstaller 패키징하는 것이었습니다. Windows Powershell을 여는 방법은 아까 1번 문제에서 배우셨으니 따로 설명드리지 않을게요.

 

# " "사이에 패키징할 파이썬 파일의 절대경로를 입력
pyinstaller -w -F "C:\Python_Coding\EXCEL_PYTHON\Excel_sum.py"

 

VScode에서 실행하는 터미널에서 pyinstaller 패키징 시, 알수 없는 이유로 win32api를 import하지 않고 패키징 하는 것으로 보입니다.

파일 용량 비교: 오작동 vs 정상 작동

 


<참고 자료>

 

1. 1번 문제 해결

https://samsons.tistory.com/16

 

[PowerShell] 스크립트 실행 시 오류(UnauthorizedAccess), (PSSecurityException)

+ CategoryInfo : 보안 오류: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess ----------------------------------------------------------- ※관리자권한으로 PowerShell 실행해야..

samsons.tistory.com

 

2. 2번 문제 해결

https://stackoverflow.com/questions/58612306/how-to-fix-importerror-dll-load-failed-while-importing-win32api

 

How to fix "ImportError: DLL load failed" while importing win32api

I'm setting up an autoclicker in Python 3.8 and I need win32api for GetAsyncKeyState but it always gives me this error: >>> import win32api Traceback (most recent call last): File "...

stackoverflow.com

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<Pyinstaller 관련 지난 글>

 

2021.06.08 - [파이썬 패키지/실행파일 배포] - [Python / PyInstaller] 파이썬 프로그램 실행 파일로 만들어서 배포하는 방법 (ft. exe 파일 용량 줄이는 팁)

 

오늘은 지난 시간에 알아보았던 파이썬 용량 줄이는 방법을 제가 직접 수행하면서 새롭게 알게 된 내용을 공유드리겠습니다.

 

1. exe 파일의 과용량 원인

 

예전에 제가 만든 간단한 크롤링 GUI 프로그램의 용량이 200~300MB로 되는 문제가 있어서 여기저기 많이 찾아보니, 

그 원인은 잘 이해는 가지 않지만 'conda와 pyinstaller가 잘 맞지 않아서' 였습니다.

 

저의 경우엔 아나콘다 패키지로 파이썬을 설치했었고, 아나콘다 패키지의 파이썬 인터프리터와 conda 기반의 패키지 관리 환경에 설치된 numpy와 pandas 같은 패키지들이 큰 용량으로 포함되었습니다. numpy와 pandas를 사용하지 않은 코드였는데도요!!

 

2. 임시 해결방안

 

그 당시 저는 가상환경 셋팅법이 너무 어려워서 아래와 같은 방법을 사용했었습니다.

 

Anaconda의 가상환경(제가 주로 사용하는 'base': conda)를 그대로 사용하면서 '--exclude 패키지명' 옵션으로 특정 패키지 제외

 

# 가장 큰 패키지인 pandas와 numpy 제외
pyinstaller -F -w --exclude pandas, --exclude numpy 파이썬 파일명.py

 

 

실제로 이 방법으로 330MB였던 프로그램을 45MB로 용량으로 줄였습니다.

 

하지만 pandas와 numpy를 사용했었다면 이 방법을 사용하지 못 했을거예요. 그래서 이 방법은 반쪽짜리 임시 해결책이라고 볼 수 있습니다.

 

3. 제대로 된 해결방안

 

위의 문제를 제대로 해결하기 위한 방법은 새로운 가상환경을 만들어서, 그 환경에서 pip install로 필요한 패키지를 설치한 다음, pyinstaller를 실행하는 것입니다.

 

가상환경을 만드는 방법은 아래에 정리해 두었으니 참고해주세요.

 

2021.12.07 - [파이썬 기초/개발환경 구축(VScode)] - [Python/VScode] 파이썬 가상환경 만들고 사용하는 법 상세정리

 

2021년 12월 10일 기준으로 예전과 조금 달라진 점이 있어서 공유드립니다.

 

2021년 5월 22일에 exe 파일을 만들었을 땐 190MB였던 파이썬 파일이 현재으로 다시 exe 파일로 만들어보니 87.3MB로 출력됩니다.

 

Anaconda (base) 가상환경

 

짧은 지식으로 추측해보건데, 현재 pyinstaller 버전(4.7)에서 그 동안 발생했던 용량 문제를 조금이나마 해결한 듯 합니다.

 

어쩌면 아래의 코드가 가장 가성비 좋은 해결방법일 수도 있겠다는 생각이 듭니다.

pip install --upgrade pyinstaller

 

위에서 조금이나마 해결했다고 하는 이유는 아래의 신규 생성한 가상환경에서 만든 exe 용량 때문입니다. 잘 보시면 약 70% 수준으로 감소한 것을 확인할 수 있습니다. 조금이라도 더 용량을 줄이고 싶으시다면 가상환경을 새로 만드시는 방법을 추천드립니다.

신규로 셋팅한 가상환경

 


오늘 준비한 내용은 여기까지입니다.

 

다음 시간에는 pyinstaller로 exe 파일 패키징 시, pyqt 혹은 selenium를 사용한 파이썬 파일이 ui 파일과 chromedriver의 경로를 못 찾는 문제와 이러한 리소스 파일을 함께 포함하여 패키징 하는 방법에 대해서 다루어 보겠습니다.

 

감사합니다.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

오늘은 배워 볼 내용은 Pyinstaller라는 패키지입니다. 너무나 유용하지만 사용법이 쉬워서 포스팅 하기에는 내용이 조금 모자랐었는데, 제가 사용하면서 겪었던 문제들을 추가해서 포스팅 해보려 합니다.

 

PyInstaller란?

 

PyInstaller란 코딩한 파이썬 프로그램을 파이썬에 대해 전혀 모르는 분들도 사용하실 수 있도록 실행 파일(.exe)로 만들어주는 파이썬 패키지입니다.

 

<PyInstaller 공식 문서>

 

1) Python 3.6이상만 사용 가능

2) Windows, Mac OS X 및 GNU / Linux에서 사용가능함

3) Windows에서 컴파일 된 실행파일은 Windows에서만 사용가능 (다른 OS의 경우도 마찬가지)

4) Windows 8 이상만 지원 / Mac OS X 10.7(Lion) 이상만 지원

 

https://pyinstaller.readthedocs.io/en/stable/

 

 

설치 방법

 

지금 껏 다른 패키지를 설치하신 분들은 아시겠지만, 아래의 코드는 터미널창에서 실행해 주셔야합니다.

 

# 설치
pip install pyinstaller

# 최신 버전으로 업그레이드 (첫 설치 시에는 필요없음)
pip install --upgrade pyinstaller

# 설치되어 있는지 확인
pyinstaller --version

 

초간단 사용 방법

 

PyInstaller를 사용하기 위해서는 별도의 import가 필요없습니다. 사용 시에도 설치했을 때와 마찬가지로 터미널 창에서 입력해주시면 됩니다.

 

# 가장 기본적인 사용법
pyinstaller 파이썬 파일명.py

 

아주 간단한 코드를 작성해서 pyinstaller로 실행파일을 만들어 보았습니다. build 폴더와 dist 폴더가 생기는데 우리가 사용할 exe 파일은 dist 폴더에 생성됩니다. 여기서 주목하실 점은 너무나도 많은 파일들이 지저분하게(?) 생성된다는 것입니다. 다른 사람에게 배포할 때 이렇게 전달하기엔 좀 별로겠죠?

 

그래서 아래의 코드를 사용하시길 추천드립니다. PyInstaller에는 여러가지 옵션들이 있지만 딱 알아야하는 것만 설명드리도록 하겠습니다.

 

pyinstaller -F -w 파이썬 파일명.py

 

 

1) -F, --onefile

 

방금 전과 같이 지저분하게 파일이 생성되지 않고, 실행파일 1개만 생성되도록 해주는 설정입니다.

 

2) -w, --windowed, --noconsole

 

기본적으로 실행 파일을 실행하면 표준 I/O용 콘솔 창(까만 창)을 열도록 되어있는데 이걸 뜨지 않도록 하는 옵션입니다.

(뜨지 않는다고  하는데 저는 자꾸 뜨네요.. 이 부분은 조금 더 공부해서 반영하도록 하겠습니다)

 

mac os에서는 이 옵션을 넣어주면 귀여운 아이콘의 파일(.app 번들 빌드)가 나오는데 어디다 쓰는지는 잘 모르겠네요!

 

 

생성된 실행 파일을 더블클릭해서 실행하면 아래와 같이 print(a+b)의 결과인 15를 출력해주는 것을 보실 수 있습니다.

 

<참고> 실행파일 아이콘 변경하기

출처. 블로그 &lt;IT에 취.하.개&gt;

 

실행파일의 아이콘을 바꾸고 싶다면, '--icon = ico 파일의 경로'을 추가해주시면 됩니다.  이미지의 포맷은 꼭 ico여야 합니다.

 

# ico 파일의 경로에서 ./의 의미는 현재 폴더라는 뜻, 절대경로를 넣어줘도 됨
pyinstaller --icon=./test.ico --onefile 파이썬 파일명.py

 

<icon-icons, 무료 아이콘 다운로드 사이트>

https://icon-icons.com/ko/

 

<참고 자료>
https://hongku.tistory.com/338 [IT에 취.하.개.]

 

 

exe 파일 용량 줄이기

 

간단한 프로그램인데 만들었더니 200~300MB..! 저도 겪었지만 다른 많은분들도 겪으셨으리라 생각됩니다.

 

저의 경우도 최근에 같은 문제를 겪었던 적이 있습니다.

 

여기저기 많이 찾아보니, 원인은 conda 명령어로 numpy와 pandas 패키지를 설치했기 때문이라고 합니다. 정확히 이유는 알 수 없으나 conda와 pyinstaller가 잘 맞지 않는 것 같네요.

 

다른 똑똑하신 분들이 찾으셨던 해결 방법은 크게 3가지입니다.

(글을 쓰다보니 아마도 1번 방법이 가장 합리적인 방법이라 생각됩니다)

 

<참고> 1번 방법을 사용하는데에 도움되는 코딩유치원 글

2021.12.07 - [파이썬 기초/개발환경 구축(VScode)] - [Python/VScode] 파이썬 가상환경 만들고 사용하는 법 상세정리

 

 

1) 새로운 가상환경을 만들어서 conda로 설치된 numpy나 pandas 패키지를 pip로 설치

 

https://emilkwak.github.io/numpy-pyinstaller-size-too-big

 

NumPy(넘파이) PyInstaller 패키징 시 실행파일(exe) 용량이 너무 큰 경우 해결책

Python, Pandas를 Excel보다 사랑하는 직장인을 위한 블로그

emilkwak.github.io

 

2) Python 공식 홈페이지를 통해 설치한 순정(?) 파이썬을 설치해서 여기서 pyinstaller 실행

 

https://blog.naver.com/PostView.nhn?blogId=blueqnpfr1&logNo=221582183962&parentCategoryNo=&categoryNo=16&viewDate=&isShowPopularPosts=true&from=search 

 

pyinstaller로 만든 .exe 파일 용량 줄이기 삽질#2 → 해결 완료!!

pyinstaller 용량 문제 때문에 어제 하루 종일 삽질을 했다 ㅋㅋㅋㅋㅋㅋ 오전 9시부터 시작을 해서, 밤 12...

blog.naver.com

 

3) Anaconda의 가상환경(제가 주로 사용하는 'base': conda)를 그대로 사용하면서 '--exclude 패키지명' 옵션으로 특정 패키지 제외

 

아직 저에게도 환경 셋팅을 하는건 너무 어려워서 1, 2번 방법은 시도하다가 실패했고, 3번 방법을 통해서 해결했습니다.

 

다만, 저의 경우엔 pandas와 numpy를 사용하지 않는 프로그램이어서 가능했던 방법이었습니다. 이 방법을 사용하니 330MB에다가 초기 실행속도도 느렸던 프로그램이 45MB로 용량이 줄어들고 속도도 빨라지는 것을 확인할 수 있었습니다.

 

# 가장 큰 패키지인 pandas와 numpy 제외
pyinstaller -F -w --exclude pandas, --exclude numpy 파이썬 파일명.py

 


 

오늘 준비한 내용은 여기까지입니다.

 

감사합니다.

 

반응형

+ Recent posts