Skip to main content
Deployment Module

Convert Python to EXE Online (Real PyInstaller Build)

Paste a Python script and download a standalone Windows .exe — a real PyInstaller build, no install. Plus a command & GitHub Actions generator for macOS/Linux and dependencies.

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 standard-library script, give it a name, and get back a real, single-file Windows .exe built with PyInstaller — no install, no signup, no build machine to set up. For macOS or Linux targets, or apps that bundle third-party packages, 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.

Advertisement
Your Python script522 B / 512 KB
# Paste your Python here. Builds for Windows or Linux; add any third-party
# pip packages under "Extra packages". Example:
import argparse
import datetime


def main() -> None:
    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 %H:%M:%S")
    print(f"Hello, {args.name}! It is {now}.")
    input("Press Enter to exit...")


if __name__ == "__main__":
    main()

One file self-extracts to a temp folder at run time, which antivirus engines flag more often. If a build gets quarantined, switch to One folder.

Windowed hides the console window — for GUI apps (tkinter, PyQt…).

Defaults to PyInstaller's icon if none. Must be a .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.

.exe

Produces a standalone 64-bit Windows .exe (one-file, 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 one-file builds — not a problem with your code, and it happens to every online py-to-exe tool. To reduce it: switch Bundle to One folder (zip), 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.

Build Options
pip install pyinstaller

pyinstaller --onefile --clean --noconfirm main.py
PyInstaller does not cross-compile — run this on the OS you are targeting (build a Windows .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.
License & Protect Your Software

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.11 · Python 3.12 · Windows + Linux x64
Last reviewed
2026-08-30

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 Python standard-library script, choose a name, and download a one-file, console-mode Windows x64 .exe. 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.

Before — greet.py · 14 lines, 349 bytes
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()
After — greet.exe · 5.7 MB, standalone Windows x64
# 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 or Linux build

PyInstaller can't cross-compile, so the one-click builder targets Windows x64. For macOS or Linux, use the generator below: its GitHub Actions workflow builds a real executable for each OS on GitHub's own runners and uploads each 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

Yes. Paste your Python, choose Windows (.exe) or Linux, click Build, and download a real, standalone PyInstaller executable — no install or signup. You can bundle third-party pip packages too (add them under Extra packages; Windows package builds take a few minutes and run asynchronously). For macOS, or packages with no prebuilt wheel, the generator below produces a GitHub Actions workflow that builds each OS on GitHub's own runners.