Supported Platforms¶
Complete matrix of supported operating systems, architectures, Python versions, and packaging formats.
Operating Systems & Architectures¶
| Platform ID | OS | Architecture | Status |
|---|---|---|---|
win-x64 |
Windows 10/11 | x86_64 | Full support |
linux-x64 |
Linux (glibc 2.17+) | x86_64 | Full support |
linux-arm64 |
Linux (glibc 2.17+) | aarch64 | Full support |
macos-x64 |
macOS 11+ | x86_64 (Intel) | Full support |
macos-arm64 |
macOS 11+ | Apple Silicon (M1/M2/M3/M4) | Full support |
Linux Distribution Compatibility¶
The native runtime is built against glibc 2.17, which means it runs on:
| Distribution | Minimum Version |
|---|---|
| Ubuntu | 18.04 LTS |
| Debian | 10 (Buster) |
| CentOS / RHEL | 7 |
| Fedora | 28 |
| Amazon Linux | 2 |
| Alpine | Not supported (uses musl, not glibc) |
Note: Alpine Linux is not supported because it uses
muslinstead ofglibc. If you need Alpine support, build your application in a glibc-based container.
Windows Compatibility¶
| Version | Status |
|---|---|
| Windows 11 | Full support |
| Windows 10 | Full support |
| Windows Server 2019+ | Full support |
| Windows 8.1 and earlier | Not supported |
macOS Compatibility¶
| Version | Status |
|---|---|
| macOS 15 (Sequoia) | Full support |
| macOS 14 (Sonoma) | Full support |
| macOS 13 (Ventura) | Full support |
| macOS 12 (Monterey) | Full support |
| macOS 11 (Big Sur) | Full support |
| macOS 10.15 and earlier | Not supported |
Apple Silicon vs Intel
When you upload a macOS build, PyLocket automatically detects its architecture (Apple Silicon, Intel, or Universal) and labels it in your build history, so you can tell your customers exactly which download to use. If you distribute both an Apple Silicon and an Intel build, each appears as its own download.
Python Versions¶
| Version | Status | Notes |
|---|---|---|
| Python 3.14 | Full support | Preview |
| Python 3.13 | Full support | Latest stable |
| Python 3.12 | Full support | Recommended |
| Python 3.11 and earlier | Not supported |
Note: The protection engine detects the Python version from the artifact itself. The
--pythonflag inpylocket protectis optional and acts as a hint used only when detection fails.
Packaging Formats¶
| Format | Tool | Artifact Type | Accepted Extensions |
|---|---|---|---|
| PyInstaller onefile | pyinstaller --onefile |
Standalone executable | .exe (Windows), .elf (Linux/macOS). The CLI requires the .elf extension, so rename extensionless onefiles before upload; the portal upload accepts extensionless binaries |
| PyInstaller onedir | pyinstaller --onedir |
Zipped directory | .zip |
| cx_Freeze | cxfreeze |
Zipped directory | .zip |
| BeeWare Briefcase (macOS) | briefcase |
macOS app bundle | .app |
| BeeWare Briefcase (other) | briefcase |
Zipped directory | .zip |
| Python Wheel | python -m build |
Wheel package | .whl |
| Python Egg | setup.py bdist_egg |
Egg package | .egg |
| Generic ZIP | — | Any Python project | .zip |
| Tar archives | — | Compressed archive | .tar.gz, .tgz, .tar.bz2 |
Recommended for end-user distribution
Use executables (.exe on Windows, .app on macOS) when distributing to end users who may not have Python installed. These produce standalone applications.
Accepted File Extensions (Complete Allow-List)¶
| Extension | Description | Auto-Detected Platform | End User Needs Python? |
|---|---|---|---|
.exe |
Windows executable | Windows | No |
.app |
macOS app bundle | macOS | No |
.elf |
Linux ELF executable | Linux | No |
.zip |
ZIP archive | Cross-platform | Depends on contents |
.tar.gz / .tgz / .tar.bz2 |
Tar archive | Cross-platform | Depends on contents |
.whl |
Python wheel | Cross-platform | Yes |
.egg |
Python egg | Cross-platform | Yes |
.py |
Python script | Cross-platform | Yes |
.pyz |
Python zipapp | Cross-platform | Yes |
.pyw |
Python windowless script | Windows | Yes |
Files with extensions not in this list are rejected on upload with a clear error message.
Raw Python files (.py, .pyz, .pyw)
Raw Python scripts are supported but are a niche use case. Protected .py output is a repacked ZIP archive (not a standalone script) that requires Python on the end user's machine plus a valid license key. See Protecting Raw Python Scripts for the full workflow and limitations.
Format-Specific Notes¶
PyInstaller --onefile: Upload the single executable directly (.exe on Windows, the binary on macOS/Linux). This is the recommended approach for distributing to end users.
PyInstaller --onedir: Compress the output directory into a .zip before uploading.
cx_Freeze: Always produces a directory. Compress to .zip before uploading.
Briefcase (macOS): Upload the .app bundle directly. On other platforms, compress the output directory to .zip.
Wheels: Upload the .whl file directly. The protected wheel can be installed with pip. Requires Python on the end user's machine.
Native Runtime Files¶
The platform-specific native runtime is bundled automatically during protection:
Each platform uses a platform-specific native runtime library that is automatically bundled during protection. The correct format (Windows DLL, ELF shared object, or Mach-O shared library) is selected based on the target platform. You do not need to manage runtime files manually.
Compatibility Matrix¶
Full cross-reference of platforms, Python versions, and packaging formats:
| PyInstaller | cx_Freeze | Briefcase | Wheel | ZIP | |
|---|---|---|---|---|---|
| win-x64 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 |
| linux-x64 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 |
| linux-arm64 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 |
| macos-x64 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 |
| macos-arm64 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 | 3.12-3.14 |
All combinations are fully supported.
See Also¶
- Cross-Platform Builds — How to build for multiple platforms
- Protection — What gets protected