Convert Python to EXE Online (Real PyInstaller Build)
Paste a Python script and download a standalone Windows .exe or Linux binary — a real PyInstaller build, no install. One-file or one-folder, console or GUI, with pip packages. Plus a command & GitHub Actions generator for macOS.
Why use this tool?
Use this tool to turn a Python program into a standalone executable your users can run without Python installed. Paste a script, give it a name, and get back a real executable built with PyInstaller — a Windows .exe or a Linux binary, one-file or one-folder, console or GUI (windowed) — and it can bundle third-party pip packages that ship prebuilt wheels. No install, no signup, no build machine to set up. For macOS targets, or packages with no prebuilt wheel, the built-in generator produces the exact PyInstaller command, a matching .spec file, and a GitHub Actions workflow that builds each OS on GitHub's own runners.
One folder ships as a .zip (your app plus its _internal/ files) and triggers fewer antivirus false-positives than a single file.
Windowed hides the console window — for GUI apps (tkinter, PyQt…).
.ico (≤1 MB).One pip package per line — a plain name and optional version (e.g. rich==13.7.1). Packages that ship prebuilt wheels are supported (most popular ones do); up to 20. No URLs, paths, or pip flags.
Produces a standalone 64-bit Windows .exe (one-folder zip, console) with a real PyInstaller build. Both targets can bundle third-party pip packages that ship prebuilt wheels — add them under Extra packages above (Windows package builds take a few minutes). Need macOS builds? Use the command & GitHub Actions generator below.
Antivirus may flag a new .exe as a virus. This is a well-known PyInstaller false-positive on unsigned builds — not a problem with your code, and it happens to every online py-to-exe tool. This tool now defaults to One folder (zip), which is flagged far less than a single self-extracting .exe — keeping that is the easiest way to avoid it. You can also fill in Version details or sign the exe with your own code-signing certificate. If it's your own build, you can restore it from your antivirus quarantine. More in the FAQ below.
This tool packages the Python you provide into an executable. Use it only for lawful purposes and code you have the right to build and distribute — you are responsible for the executables you create with it.
Other platforms & dependencies
Building for macOS or Linux, or bundling third-party packages? Generate the exact PyInstaller command, a matching .spec file, and a GitHub Actions workflow that builds real Windows, macOS & Linux executables on GitHub's own runners.
pip install pyinstaller pyinstaller --onefile --clean --noconfirm main.py
.exe on Windows, etc.), or use the Cloud build tab to build all OSes on GitHub Actions. Save the spec as main.spec and rebuild with pyinstaller main.spec.Selling your Python App?
Don't let your software be pirated. With Licers.com, you can easily issue license keys, bind them to devices (HWID), and instantly validate licenses natively in Python.
- ✓ Free forever plan available
- ✓ Simple Python SDK integration
- ✓ Stop piracy instantly
Tool facts
- Supported Python
- PyInstaller 6.22.2 · Python 3.12 (Windows) / 3.11 (Linux) · Windows + Linux x64
- Last reviewed
- 2026-09-04
What it can't do
- •Build macOS executables online — the one-click builder targets Windows (.exe) and Linux (ELF); the command & workflow generator covers macOS.
- •Bundle packages that don't publish prebuilt wheels — the online builder installs wheels only (no source builds or C compilation); for those, use the GitHub Actions generator below.
- •Protect your source — a PyInstaller build can be unpacked, so obfuscate before packaging.
About Python to EXE Online
PyInstaller is the standard way to package a Python script into a single standalone executable, but it does not cross-compile — a Windows .exe must be built on Windows, a macOS app on macOS, a Linux binary on Linux — which normally means owning a build machine for each target.
This page runs a genuine PyInstaller build for you: paste a script, choose a name and options, and download a native executable — a Windows x64 .exe or a Linux x64 binary, as a single file or a one-folder bundle, in console or GUI (windowed) mode. It's a real 'Python to EXE online' build that produces a native executable you can hand to users who don't have Python installed.
The online builder handles both Windows and Linux, and either target can bundle third-party pip packages (add them under Extra packages — packages that ship prebuilt wheels are supported). Windows builds with packages run under Wine and take a few minutes, so they build asynchronously — submit, and the page polls until the executable is ready to download. For macOS builds, or packages with no prebuilt wheel, the generator below builds the exact PyInstaller command, a .spec file, and a ready-to-commit GitHub Actions workflow — GitHub's own Windows, macOS and Linux runners then build a real executable for each OS and upload each as a downloadable artifact, at no cost on public repositories.
A packaged executable does not protect your source — PyInstaller bundles can be unpacked and the bytecode recovered. If you're shipping proprietary code, obfuscate it first before packaging.
See a real build (tested)
Here is an actual build, start to finish. We take a small standard-library CLI, send it to the builder, and run the PyInstaller executable it returns. The .exe bundles its own Python interpreter, so it runs on a Windows machine that has no Python installed.
import argparse
import datetime
def main():
parser = argparse.ArgumentParser(description="Greet someone.")
parser.add_argument("name", nargs="?", default="world")
args = parser.parse_args()
now = datetime.datetime.now().strftime("%Y-%m-%d")
print(f"Hello, {args.name}! Today is {now}.")
if __name__ == "__main__":
main()# the build returned greet.exe (windows-x86_64); it runs with no Python installed:
$ ./greet.exe
Hello, world! Today is 2026-08-29.
$ ./greet.exe Acme
Hello, Acme! Today is 2026-08-29.
# one self-contained file. 349 B of source -> 5.7 MB .exe (the interpreter is bundled in).Troubleshooting: the .exe won't run, or Windows warns about it
A freshly built executable is new and unsigned, so Windows and antivirus treat it cautiously. None of these are bugs in the build — they're standard behaviour for any new PyInstaller .exe, and each has a clear fix.
Windows shows "Windows protected your PC" (SmartScreen)
This appears for any newly downloaded, unsigned Windows executable — including ones you build locally with PyInstaller — because Windows tags files that came from the internet and SmartScreen has no reputation for a brand-new binary yet. To run your own build, click "More info" then "Run anyway", or remove the download tag first: right-click the .exe, choose Properties, tick Unblock, then OK. To distribute it to others without the warning, sign it with your own code-signing certificate — see our tested walkthrough on how to code-sign a PyInstaller EXE, including signing from Linux/CI. Note that EV certificates no longer bypass SmartScreen instantly — reputation now builds with download volume over time.
Antivirus flags or quarantines the .exe
PyInstaller's onefile bootloader triggers heuristic false positives on some scanners — a long-standing, well-documented issue, not something specific to this builder. Fill in the Version details (product, company, version) before building so the file carries real Windows metadata, which reduces some false positives; if one vendor still flags it, submit the file to that vendor as a false positive. Full fixes with tested one-file vs one-folder evidence: PyInstaller EXE flagged as a virus.
It builds but crashes with ModuleNotFoundError
A script that imports a third-party package (requests, numpy, pandas…) builds but can't find it at runtime unless you declare it. List each package under Extra packages before building — the builder installs it into the executable (this works for both Windows and Linux; Windows package builds take a few minutes). Packages with no prebuilt wheel aren't supported online — for those, use the command and GitHub Actions generator lower on this page, which installs your requirements.txt during the build.
You need a macOS build
Windows and Linux builds run here online. PyInstaller can't cross-compile to macOS, so for a .app/mac binary use the generator below: its GitHub Actions workflow builds a real macOS executable on GitHub's own runners and uploads it as a downloadable artifact.
The .exe is several MB and slow on first launch
A onefile executable bundles the interpreter and unpacks itself to a temp folder at startup, so it's larger and a little slower to launch than a plain script — expected for PyInstaller (our 349-byte example became 5.7 MB). If launch speed matters more than shipping a single file, a one-folder build from the generator below starts faster.
Frequently Asked Questions
Explore Other Tools
cURL to Python Converter
Paste any curl command and instantly get clean Python code for requests, httpx, or aiohttp.
Ruff Linter & Formatter
Run Ruff online — the fast Rust linter & formatter that replaces Flake8, isort and Black. Free, no install, runs in your browser.
Ruff Playground
A deep Ruff playground: inspect the AST and token stream Ruff parses, its formatter IR, and live ruff check diagnostics, while editing the Ruff config and sharing a link that reopens your exact setup.
Python Marshal Encryptor
Compile Python to version-locked marshaled bytecode with optional zlib or zstd compression and get a ready-to-run loader. Target Python 3.10–3.14. Runs 100% in your browser.