파이썬을 코드로 배포하려니 나도 힘들고 사용자도 힘든 것 같다.
이번 기회에 실행파일로 배포하는 방법을 정리해 봤다.
대부분의 경우, pyinstaller을 사용하면 될 것 같고 문제가 생기면 다른 툴을 찾아야 할 것 같다.
pyinstaller를 이용한 실행파일 만들기
링크에 자세한 내용이 있다. 간단하게 아래와 같다.
살펴보면 my_code.py가 참조하는 모든 코드들을 알아서 확인해서 패키징을 해준다.
--onefile 옵션을 제거하면 여러 파일이 생성되게 되는데 이러면 별도의 설치 제작 프로그램을 사용해야 한다.
(다만 실행속도는 향상된다고)
# 패키지 인스톨
$ pip install pyInstaller
# 실행파일로 만들기
$ pyinstaller --onefile my_code.py
# 아래 디렉토리에 실행파일이 생성된다.
$ ls dist/my_code
pyinstaller --onefile --noconsole my_code.py
참고로 해당 명령어를 수행한 플랫폼에서 수행가능한 실행파일을 생성한다.
리눅스에서는 리눅스용, 윈도우즈에서는 윈도우즈 용으로 생성된다.
아래 괜찮은 유튜브 영상도 있다.
auto-py-to-exe를 이용한 실행파일 만들기
# 패키지 설치
pip install auto-py-to-exe
# 패키지 실행
auto-py-to-exe
실행하면 아래 화면을 볼 수 있다. 화면을 보면 알다시피 pyinstaller를 랩핑하고 있다.
아래 유튜브 영상도 있다.
cx_Freeze를 이용한 실행파일 만들기
pyinstaller를 사용하기 힘든 상황에서 사용하는 방식이다.
# 패키지 설치
pip install cx_Freeze
pyinstaller와는 다르게 별도의 setup파일을 만들어야 한다고 한다.
다음 링크에서 확인하자.
기타 방법들
왜 이렇게 많은 방법이 있는지 모르겠지만... 많다. 혹시 추후에 문제가 생길 경우, 정리해 보겠다.
- py2exe : Windows only
- py2app : Macs only
- pynsist : 실행파일이 아닌 installer를 생성하는 방식. 배포까지 고려할 경우의 옵션인 것 같다.
- Nuitka : python 코드를 패키징 하는 것이 아니고 컴파일을 통해 바이너리를 생성한다고 한다. 속도 측면에서 이득이 있을 것 같다. 다만 쉽게 되지는 않을 것으로 추정된다.
- cython : Nuitka와 유사한 솔루션으로 보이고 이거는 C 기반이다.
이슈 1 : 생성되는 실행파일의 사이즈가 너무 클 경우
pyinstaller를 이용해서 실행파일을 만들었더니 189MB짜리 바이너리가 튀어나왔다.
놀라서 인터넷을 뒤져보니 패키지 만드는 방식이 그렇게 스마트하지 않다고 한다.
꼭 필요한 패키지만 설치한 virtual 환경에서(링크) 작업을 하니 20MB로 줄었다.
이슈 2 : 실행이 안될 경우
생성이 잘되어도 실행이 안될 수 있다.
이 경우는 정답은 없는 것 같고 구글링을 통해서 해결책을 찾아야 한다.
나 같은 경우는 아래 에러를 만났는데... 구글링 했더니 같은 이슈를 겪은 사람이 있었다.
$ my_code
... 중략 ...
ModuleNotFoundError: No module named 'PIL._tkinter_finder'
[878484] Failed to execute script 'titan-viewer' due to unhandled exception!
# 아래와 같이 생성하면 해결된다.
$ pyinstaller --onefile my_code.py --hidden-import='PIL._tkinter_finder'
참고자료
'소프트웨어 > 파이썬 (python)' 카테고리의 다른 글
파이썬 모듈과 패키지 사용하기 (with VSCode) (0) | 2023.07.28 |
---|---|
파이썬(Python) virtualenv 정리 (0) | 2023.07.27 |