본문 바로가기
Developer/Python

[파이썬] Pyinstaller, cx_Freeze 사용법 (exe 파일 생성)

by Doony 2020. 7. 29.

파이썬은 조금만 익숙해지면 정말 재미있는? 언어입니다. 상상할 수 있는 거의 대부분의 것을 할 수 있기 때문인데요. 오늘은 파이썬 프로그램을 exe로 만드는 방법에 대해 알아보겠습니다.

exe 실행파일을 만드는 이유

보통 파이썬으로 작업을 하면 .py 파일만 남기 때문에, 파이썬이 설치되지 않은 환경에서는 해당 프로그램을 구동하기가 어렵습니다. 때문에 프로그램 배포를 위해서는 .exe 형태의 범용 실행파일로 변환해줘야 합니다.


exe 파일을 만드는 라이브러리 소개

파이썬에는 exe로 변환하는 라이브러리들이 있습니다. 오늘은 그 중에서도 pyinstallercx_Freeze에 대해 간단하게 알아보겠습니다.


Pyinstaller 사용법

공식 홈페이지에서 간단한 사용방법을 알 수 있습니다.


  • pip install pyinstaller : 먼저 pyinstaller을 설치합니다.
  • pyinstaller yourProgram.py : 만든 py 파일을 exe파일로 변환합니다.

두번째 코드를 실행하시면, 해당 폴더에 dist, build 폴더가 생성됩니다. 이 때 dist 폴더 안에 exe 파일이 생성되는 것을 볼 수 있습니다.

exe파일을 만들 때 다양한 명령어들이 있습니다.
저는 주로 다음과 같이 사용합니다.

  • pyinstaller --onefile --icon=icon.ico --hidden-import=라이브러리이름 --hidden-import=라이브러리 -F pythonFile.py

즉, 저런식으로 하면 하나의 exe파일로만 만들면서, icon은 icon이라고 미리 저장해놓은 ico파일로 만들수 있으며, 라이브러리들을 모두 import해서 생성하는 방식입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
C:\>pyinstaller
 
usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME]
                   [--add-data <SRC;DEST or SRC:DEST>]
                   [--add-binary <SRC;DEST or SRC:DEST>] [-p DIR]
                   [--hidden-import MODULENAME]
                   [--additional-hooks-dir HOOKSPATH]
                   [--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES]
                   [--key KEY] [-d {all,imports,bootloader,noarchive}] [-s]
                   [--noupx] [--upx-exclude FILE] [-c] [-w]
                   [-i <FILE.ico or FILE.exe,ID or FILE.icns>]
                   [--version-file FILE] [-m <FILE or XML>] [-r RESOURCE]
                   [--uac-admin] [--uac-uiaccess] [--win-private-assemblies]
                   [--win-no-prefer-redirects]
                   [--osx-bundle-identifier BUNDLE_IDENTIFIER]
                   [--runtime-tmpdir PATH] [--bootloader-ignore-signals]
                   [--distpath DIR] [--workpath WORKPATH] [-y]
                   [--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL]
                   scriptname [scriptname ...]
 
pyinstaller: error: the following arguments are required: scriptname
cs

위와 같이 cmd에 pyinstaller을 치면 활용 옵션들이 나오는데, 상세 내용은 여기에 잘 정리되어 있습니다.

cx_Freeze 사용법

가끔씩 pyinstaller가 원인 모를 이유도 뻑이 날 때 사용하는, 또 다른 exe 생성 라이브러리입니다. pyinstaller은 cmd창에서 명령어만으로 exe를 만들어주지만, 이 라이브러리는 별도의 setup.py 파일 설정이 필요합니다.

  • pip install cx_Freeze : 라이브러리를 설치해줍니다.
  • setup.py 를 아래와 같이 설정합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from cx_Freeze import setup, Executable
 
buildOptions = dict(packages=['matplotlib''pandas'], excludes = ["tkinter""numpy"])
 
exe = [Executable('yourProgram.py')]
 
setup(
    name='testingName',
    version='0.0.1',
    author='me',
    description = 'description',
    options = dict(build_exe = buildOptions),
    executables = exe
)
 
cs

BuildOptions: 포함할, 또는 제외시킬 라이브러리를 명기합니다. 이 점은 저는 개인적으로 pyinstaller보다 편한 부분 같습니다. cmd에서 명령어로 치는게 아닌, 파일에 라이브러리들을 깔끔하게 정렬할 수 있습니다.


Executable: 구동시킬 py 파일의 이름 및 경로를 적습니다.


setup(): 기본 셋업 부분을 만듭니다.


  • python setup.py build: exe파일을 만듭니다.

해당 명령어를 실행하면, 폴더가 만들어지고 그 안에 exe파일이 생성된 것을 볼 수 있습니다. 이것도 pyinstaller처럼 onefile로 가능한지는 잘 모르겠네요.


import 에러들

pyinstaller도 그렇고, cx_Freeze도 그렇고 다양한 오류가 많이 발생합니다. 특히나 라이브러리 import 부분에서 많이 발생하는데, 기본적으로 exe를 만들 때 라이브러리를 포함시켜주지 않으면 에러가 발생합니다. 따라서 만들때부터 라이브러리를 포함시키던지, 아니면 해당 라이브러리르 폴더째 들고와서 같은 경로에 넣는 식으로 해결이 가능합니다.


또 matplotlib도 이런저런 에러가 많이 발생하는데.. 이 부분은 stackoverFlow에 다 나와있으니 생략하도록 하겠습니다.


결론

지금까지 exe파일을 만드는 라이브러리 2개에 대해 살펴봤습니다. 한번씩 써보시면 각각의 장단점이 있어서 더 편하신 것으로 선택하시면 되겠습니다.

댓글