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 |
mac-x64 |
macOS 11+ | x86_64 (Intel) | Full support |
mac-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 |
Python Versions¶
| Version | Status | Notes |
|---|---|---|
| Python 3.13 | Full support | Latest stable |
| Python 3.12 | Full support | Recommended |
| Python 3.11 | Full support | |
| Python 3.10 | Full support | |
| Python 3.9 | Full support | Minimum supported |
| Python 3.8 and earlier | Not supported |
Important: The
--pythonflag inpylocket protectmust match the Python version used to build the artifact. Bytecode is version-specific — a mismatch will cause decryption failures at runtime.
Packaging Formats¶
| Format | Tool | Artifact Type | Accepted Extensions |
|---|---|---|---|
| PyInstaller onefile | pyinstaller --onefile |
Standalone executable | .exe (Windows), binary (macOS/Linux) |
| 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 |
.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:
| Platform | Runtime File | Format |
|---|---|---|
| Windows x64 | _pylocket_rt.pyd |
Windows DLL |
| Linux x64 | _pylocket_rt.so |
ELF shared object |
| Linux ARM64 | _pylocket_rt.so |
ELF shared object |
| macOS x64 | _pylocket_rt.so |
Mach-O shared library |
| macOS ARM64 | _pylocket_rt.so |
Mach-O shared library |
Compatibility Matrix¶
Full cross-reference of platforms, Python versions, and packaging formats:
| PyInstaller | cx_Freeze | Briefcase | Wheel | ZIP | |
|---|---|---|---|---|---|
| win-x64 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 |
| linux-x64 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 |
| linux-arm64 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 |
| mac-x64 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 |
| mac-arm64 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 | 3.9-3.13 |
All combinations are fully supported.
See Also¶
- Cross-Platform Builds — How to build for multiple platforms
- Protection — What gets protected