Packaging Python Applications as Standalone Binaries with PyInstaller

An expert guide by myTech.Today, your Barrington, IL MSP
PyInstaller transforms your Python scripts into self-contained executables for macOS, Linux, and Windows—no end-user installs required. At myTech.Today, we leverage PyInstaller to streamline cross-platform distribution of your business-critical tools.
Here’s a battle-tested recipe for packaging the Datasette project:
export DATASETTE_BASE=$(python -c 'import os; print(os.path.dirname(__import__("datasette").__file__))') \
pyinstaller -F \
--add-data "$DATASETTE_BASE/templates:datasette/templates" \
--add-data "$DATASETTE_BASE/static:datasette/static" \
--hidden-import datasette.publish \
--hidden-import datasette.publish.heroku \
--hidden-import datasette.publish.cloudrun \
--hidden-import datasette.facets \
--hidden-import datasette.sql_functions \
--hidden-import datasette.actor_auth_cookie \
--hidden-import datasette.default_permissions \
--hidden-import datasette.default_magic_parameters \
--hidden-import datasette.blob_renderer \
--hidden-import datasette.default_menu_links \
--hidden-import uvicorn \
--hidden-import uvicorn.logging \
--hidden-import uvicorn.loops \
--hidden-import uvicorn.loops.auto \
--hidden-import uvicorn.protocols \
--hidden-import uvicorn.protocols.http \
--hidden-import uvicorn.protocols.http.auto \
--hidden-import uvicorn.protocols.websockets \
--hidden-import uvicorn.protocols.websockets.auto \
--hidden-import uvicorn.lifespan \
--hidden-import uvicorn.lifespan.on \
$(which datasette)
PyInstaller follows your imports automatically, but dynamic plugins (like Datasette’s) and certain uvicorn
modules require explicit --hidden-import
flags. If you see ModuleNotFoundError
at runtime, simply add the missing module to your build command.
Why choose myTech.Today?
- Tailored PyInstaller configurations for any Python app
- Automated CI/CD pipelines that build and test your executables
- Hands-on cross-platform validation on macOS, Linux, and Windows
- Rapid troubleshooting of hidden imports and runtime errors
- Ongoing maintenance, updates, and expert consulting
From internal data utilities to commercial software, myTech.Today ensures your Python applications are packaged professionally—so you can focus on innovation, not deployment headaches.