파이썬 exe 만들기: Runcell, PyInstaller, Nuitka, cx_Freeze로 Python 파일을 EXE로 변환하는 방법
업데이트

파이썬을 EXE로 변환하려면 Runcell Python to EXE 변환기 (opens in a new tab)부터 시작하세요. .py 파일, 프로젝트 폴더 또는 ZIP을 추가하고, 앱을 시작하는 스크립트를 고른 뒤 의존성을 확인하고 Build Windows EXE를 선택하면 됩니다. 결과 파일을 내려받아 Python이 설치되지 않은 Windows 사용자에게 공유하세요.
EXE는 프로그램과 함께 실행에 필요한 런타임과 파일을 하나로 묶은 것입니다. script.py의 이름을 script.exe로 바꾼다고 이렇게 되지는 않습니다. 이 가이드는 먼저 Runcell 사용법을 단계별로 설명하고, 브라우저가 실행 파일(바이너리)을 어떻게 만드는지 알아본 다음, 로컬 패키징 도구 세 가지의 명령어를 소개합니다. Runcell은 Kanaries 제품이며, 저희가 권장하는 브라우저 기반 방법입니다.
- 파이썬 exe 만들기: Runcell, PyInstaller, Nuitka, cx_Freeze로 Python 파일을 EXE로 변환하는 방법
- pandas 3.1 업그레이드: inplace Pandas4Warning 해결과 read_csv 속도 향상
- OpenCode 2.0 업그레이드 방법: v1 설정·플러그인·세션 마이그레이션 가이드
- 파이썬 3.15 설치·업그레이드 가이드: uv 사용법, 지연 임포트(lazy import), 데이터 패키지 호환성
- Claude Code Mods 사용법: 첫 Mod 만들기·테스트·설치와 커뮤니티 예시 15선
- Claude Code AGENTS.md 지원: 설정 방법, 4가지 로딩 모드, Codex·OpenCode·Cursor와 한 파일 공유하기
- GPT Image 2.5 사용법: Flare·Sunburst 비교와 API 가격
- DeepSeek Harness 사용법: 설치, 설정, 첫 에이전트 실행까지
- Runcell Science: Claude Science를 대체할 오픈소스 AI 연구 워크스페이스
- 맥 잠자기 방지: 맥북 닫아도 Codex와 Claude Code 계속 실행하기
- OpenClaw vs ZeroClaw vs Pi Agent vs Nanobot: 2026년에 어떤 AI 에이전트 스택을 선택해야 할까?
- Claude Code로 Jupyter 노트북을 분석하는 방법 | Data Science 실무 가이드와 한계
- Claude Code 루틴 사용법: AI 에이전트 cron 작업과 자동 트리거
- Claude Code Desktop에서 Bypass permissions 켜는 법
- Google의 A2A 프로토콜을 사용한 두 개의 Python 에이전트 빌드하기 - 단계별 튜토리얼
- 2025년 파이썬에서 가장 성장하는 상위 10개 데이터 시각화 라이브러리
파이썬 EXE 변환 방법 고르기
| 방법 | 이럴 때 선택 | 빌드하는 곳 |
|---|---|---|
| Runcell (opens in a new tab) (저희의 첫 번째 추천) | 콘솔(명령줄) 스크립트나 프로젝트가 있고, 패키저를 설치하지 않고 Windows x64 EXE를 만들고 싶을 때 | 내 기기의 브라우저 |
| PyInstaller | 폴더나 단일 실행 파일을 만드는 Python 명령을 쓰고 싶을 때, 또는 GUI 앱(Tkinter, PySide/PyQt)을 패키징할 때 | Windows용 빌드라면 Windows의 Python 환경 |
| Nuitka | Python을 컴파일하고 네이티브 컴파일러 도구 체인을 직접 구성하고 싶을 때 | Windows의 Python 환경과 지원되는 C 컴파일러 |
| cx_Freeze | 애플리케이션 폴더 형태로 배포하고 빌드 설정을 직접 관리하고 싶을 때 | Windows용 빌드라면 Windows의 Python 환경 |
아래 명령어는 Windows PowerShell 기준입니다. 패키징 도구를 직접 설치하고 설정해야 하는 것은 로컬 방법뿐입니다.
방법 1: Runcell로 파이썬을 EXE로 변환하기
작고 결과를 재현할 수 있는 스크립트로 시작하기
아래 예제를 receipt.py로 저장하세요. 영수증을 출력하고 합계를 계산한 뒤, 더블클릭으로 연 콘솔 창이 바로 닫히지 않도록 Enter 입력을 기다립니다. 서드파티 의존성이나 추가 파일은 없습니다.
items = {"Notebook": 19.50, "Cable": 8.25, "Stand": 12.25}
print("Receipt")
for name, price in items.items():
print(f"{name}: ${price:.2f}")
print(f"Total: ${sum(items.values()):.2f}")
input("Press Enter to close...")Python이 이미 설치되어 있다면 패키징하기 전에 소스 코드부터 실행해 확인하세요.
python receipt.py합계는 Total: $40.00으로 나와야 합니다. Enter를 누르면 종료됩니다. 스크립트를 처음 실행해 본다면 Python 스크립트 실행 가이드에서 터미널 설정 방법을 확인하세요.
프로젝트를 추가하고 빌드하기
- Runcell Python to EXE 변환기 (opens in a new tab)를 열고 페이지의 변환기 영역으로 이동합니다.
receipt.py파일을 선택합니다. 기존 콘솔 애플리케이션이라면 대신 프로젝트 디렉터리나 ZIP을 선택하고, 앱이 사용하는 모듈과 리소스를 함께 포함하세요.- 엔트리 스크립트로
receipt.py를 선택합니다. 큰 프로젝트라면 평소 애플리케이션을 시작할 때 실행하는 스크립트(예:main.py)가 여기에 해당합니다. - 감지된 임포트, 의존성, 포함된 파일을 검토합니다. 영수증 예제에는 추가 패키지가 필요 없습니다. 직접 만든 앱이라면 필요한 에셋과 패키지 버전이 배포하려는 프로젝트와 일치하는지 확인하세요. Runcell의 런타임은 Python 3.14이므로, 각 패키지에 Windows의 Python 3.14에서 동작하는 휠(
cp314,abi3또는 순수 Python 휠)이 있어야 합니다. Build Windows EXE를 선택한 다음 생성된 실행 파일을 내려받습니다. 공유하기 전에 Windows에서 열어 영수증 출력을 확인하세요.
저희가 브라우저에서 확인했을 때 Runcell은 receipt.exe를 생성하고 다운로드했습니다. 파일 헤더를 보면 Windows x64 실행 파일로 식별됩니다. 이 EXE를 Windows에서 실행해 보지는 않았습니다.
여러 파일로 된 프로젝트는 디렉터리 구조를 그대로 유지하세요. templates/invoice.html에서 불러오는 템플릿은 애플리케이션이 기대하는 경로에 포함되어 있어야 합니다.
브라우저가 Windows EXE를 만드는 방식
Runcell의 자체 패키징 엔진은 미리 컴파일된 Windows 런처, Python 런타임, 프로젝트 파일, 의존성을 결합합니다. 그리고 이 구성 요소들을 내 기기에서 다운로드할 수 있는 .exe로 조립합니다. Windows 구성 요소가 이미 컴파일되어 있으므로, 브라우저는 로컬에서 Windows 컴파일러를 실행하지 않고도 최종 바이너리를 만들 수 있습니다.
작업은 두 단계로 나뉩니다.
Your Python project + dependencies
+
Python runtime + precompiled Windows launcher
|
v
Runcell assembles the EXE in your browser
|
v
Download the file, then run it on Windows파일을 생성하는 것과 실행하는 것은 별개의 작업입니다. 브라우저는 실행 파일을 조립하고, 완성된 애플리케이션은 Windows가 실행합니다. 이 패키징 과정은 Runcell 동작 방식 가이드 (opens in a new tab)에 설명되어 있습니다.
내 기기 밖으로 나가지 않는 것
Runcell은 브라우저에서 EXE를 빌드합니다. 프로젝트가 내장 Windows 런타임에 포함되지 않은 모듈을 임포트하면 변환기가 빌드 전에 알려 줍니다. 해당 임포트를 제거하거나 아래의 로컬 패키저 중 하나를 사용하세요.
빌드하는 동안 소스 코드와 비밀 정보는 내 기기에 그대로 남습니다. 다만 완성된 EXE에는 코드가 들어 있으므로, 남에게 공개하면 안 되는 비밀 정보는 번들에 넣지 마세요.
방법 2: PyInstaller로 로컬에서 빌드하기
PyInstaller (opens in a new tab)는 스크립트, 스크립트가 임포트하는 모듈, Python 런타임을 모아 배포 가능한 애플리케이션으로 만듭니다. Windows EXE가 필요하다면 PyInstaller를 Windows에서 실행하세요. PyInstaller는 자신이 실행되는 운영체제용으로 빌드합니다.
receipt.py가 있는 폴더에서 PowerShell을 엽니다. 가상 환경을 만들고 그 안에 PyInstaller를 설치합니다. python.org에서 Python을 설치했다면 py 런처는 python이 PATH에 없어도 동작하며, 가상 환경의 Python을 직접 호출하면 활성화 단계를 건너뛸 수 있습니다.
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install pyinstaller
.\.venv\Scripts\python.exe -m PyInstaller --onefile receipt.py결과물은 dist\receipt.exe입니다. PowerShell에서 실행해 출력을 확인하세요.
.\dist\receipt.exe직접 만든 프로젝트라면 빌드하기 전에 같은 가상 환경에 의존성을 설치하세요. requirements.txt가 있다면 .\.venv\Scripts\python.exe -m pip install -r requirements.txt를 사용합니다.
대소문자를 구분하는 -m PyInstaller 호출 방식은 설치 가이드 (opens in a new tab)에 나와 있습니다. 이렇게 하면 패키저와 의존성이 같은 Python 환경 안에 유지됩니다.
콘솔, GUI, 폴더 빌드 중 고르기
receipt.py는 print()와 input()을 사용하므로 콘솔 모드를 그대로 두세요. 모든 상호작용을 자체 창에서 처리하는 그래픽 애플리케이션이라면 --windowed로 콘솔 창을 숨길 수 있습니다. 애플리케이션과 보조 파일을 폴더 안에서 살펴보고 싶다면 --onedir로 시작하고, 파일 하나로 내려받게 하려면 --onefile을 사용하세요. 자세한 내용은 PyInstaller 옵션 레퍼런스 (opens in a new tab)를 참고하세요.
assets 디렉터리를 포함하려면 명시적으로 추가합니다.
.\.venv\Scripts\python.exe -m PyInstaller --onefile --add-data "assets:assets" receipt.py이 예제는 assets 폴더를 미리 만들어 두었다고 가정합니다. 번들에 포함된 읽기 전용 파일은 PyInstaller 런타임 가이드 (opens in a new tab)의 설명대로 __file__을 기준으로 한 상대 경로로 찾으세요. 경로 처리 방법은 Python pathlib 가이드에서 설명합니다.
방법 3: Nuitka로 컴파일하고 패키징하기
Nuitka (opens in a new tab)는 Python을 컴파일하며 배포 가능한 애플리케이션도 만들 수 있습니다. 컴파일러 기반 빌드를 직접 제어하고 싶을 때 선택하세요. 지원되는 C 컴파일러가 필요하며, Windows에서는 매뉴얼이 Visual Studio 2022 이상을 선택지 중 하나로 안내합니다. 매뉴얼에 따르면 MinGW64는 실험적 플래그 없이는 Python 3.13 이상에서 동작하지 않으므로, 최신 Python을 쓴다면 Visual Studio Build Tools를 설치한다고 생각하고 준비하세요.
같은 방식으로 만든 가상 환경에 Nuitka를 설치하고 one-file 모드를 지정합니다.
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install nuitka
.\.venv\Scripts\python.exe -m nuitka --mode=onefile receipt.pyWindows에서 예상되는 결과물은 receipt.exe입니다. 배포용 폴더가 더 좋다면 --mode=standalone을 사용하세요. 두 모드 중 하나는 반드시 명시적으로 지정해야 합니다. Nuitka의 기본 모드인 accelerated 모드는 Python이 없는 컴퓨터에 애플리케이션을 배포하기 위한 모드가 아닙니다. 컴파일러 설정과 패키지별 옵션은 공식 매뉴얼을 따르세요.
방법 4: cx_Freeze로 애플리케이션 폴더 만들기
cx_Freeze (opens in a new tab)는 보통 실행 파일과 보조 라이브러리가 들어 있는 디렉터리를 만듭니다. 빌드 설정을 관리하면서 폴더 전체를 배포하고 싶을 때 선택하세요.
같은 방식으로 만든 가상 환경에 패키지를 설치하고 명령줄 빌더를 실행합니다.
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install cx-Freeze
.\.venv\Scripts\cxfreeze.exe --script receipt.py --target-dir dist이 명령은 최신 cxfreeze 명령 레퍼런스 (opens in a new tab)를 따릅니다. EXE만 복사하지 말고 라이브러리를 포함한 dist 폴더 전체를 배포하세요. 프로젝트 설정을 반복해서 재사용하고 싶다면 cx_Freeze의 pyproject.toml 설정이나 Python setup 스크립트를 활용할 수 있습니다.
공유하기 전에 결과물 확인하기
받는 사람의 환경과 비슷한 Windows 컴퓨터에서 애플리케이션을 실행해 보세요. 이 예제라면 항목별 가격, $40.00 합계, Enter 입력 안내를 확인합니다. Python이 따로 설치되지 않은 컴퓨터에서 실행해 보면 런타임과 의존성이 제대로 포함되었는지 확인하기 좋습니다.
규모가 큰 앱이라면 입력 파일을 선택하고 보고서를 저장하는 것처럼 받는 사람이 실제로 쓸 기능을 직접 실행해 보세요. 콘솔 창이 바로 닫힌다면 PowerShell에서 EXE를 실행해 오류 메시지를 읽으세요. 이미지나 템플릿을 찾지 못한다면 패키징된 파일과 그 파일을 불러오는 경로를 모두 확인하세요. 동적 임포트는 로컬 패키저의 옵션으로 명시적으로 포함해야 할 수 있습니다.
이 도구들로 만든 서명되지 않은 EXE는 처음 열 때 Microsoft Defender SmartScreen 경고가 뜰 수 있습니다. 받는 사람이 More info를 선택한 다음 Run anyway를 선택하면 실행됩니다(한국어 Windows에서는 “추가 정보”, “실행”으로 표시됩니다).
자주 묻는 질문
패키저를 설치하지 않고 .py 파일을 .exe로 변환하려면 어떻게 하나요?
Runcell Python to EXE 변환기 (opens in a new tab)를 사용하세요. Python 파일, 폴더 또는 ZIP을 선택하고 엔트리 스크립트를 고른 뒤 의존성을 검토하고, 브라우저에서 Windows EXE를 빌드하면 됩니다.
브라우저에서 정말 Windows 실행 파일을 만들 수 있나요?
네. Runcell은 미리 컴파일된 Windows 구성 요소, Python 런타임, 애플리케이션을 브라우저 안에서 EXE로 조립합니다. 그 파일을 내려받아 Windows에서 실행하면 됩니다. 바이너리를 만들기 위해 브라우저가 Windows 애플리케이션을 실행할 필요는 없습니다.
EXE를 실행하는 사람도 Python을 설치해야 하나요?
런타임과 필요한 의존성을 함께 묶어 배포하면 Python을 따로 설치할 필요가 없습니다. Runcell은 패키징 과정에서 런타임을 포함합니다. 로컬 도구로 폴더 빌드를 했다면 출력 폴더 전체를 공유하세요.
단일 EXE를 만드는 PyInstaller 명령어는 무엇인가요?
PyInstaller와 프로젝트 의존성이 설치된 Windows 환경에서 python -m PyInstaller --onefile receipt.py를 실행하세요. 예제의 결과물은 dist\receipt.exe입니다.
출처 및 테스트
Runcell 워크플로와 패키징 방식은 2026년 11월 4일에 확인한 공개 제품 가이드 (opens in a new tab)를 따랐습니다. 로컬 빌드 명령어는 각 방법에 링크한 공식 문서를 따랐습니다. 저희는 macOS에서 영수증 예제 소스를 실행하고, 실제 Runcell 변환기에서 이 파일을 선택해 receipt.exe를 생성·다운로드한 뒤 Windows x64 PE 헤더를 확인했습니다. 또한 macOS에서 PyInstaller 6.22.3(--onefile)과 cx_Freeze 8.7.4로 영수증 스크립트를 빌드해 명령어를 검증했고, Nuitka의 모드 옵션은 도움말 출력과 대조했습니다. 이 글을 위해 Windows에서 EXE를 실행하지는 않았습니다.